I'm trying to make a date textbox on my blog, and the date is only numbers. I don't want anybody making a mistake typing a letter. Is there any way to limit the characters to only numerals? Thanks!
If you use jQuery, you can do it like in this jsfiddle
$('input').keypress(function(e) {
var a = [];
var k = e.which;
for (i = 48; i < 58; i++)
a.push(i);
if (!(a.indexOf(k)>=0))
e.preventDefault();
});
Use HTML5 input number type instead and leverage native browser validation. Thus, no JavaScript required.
<input type="number" />
It has wide support in browsers and it's the standard and best-practice solution.
Also on mobile
and tablets
the numeric key pad will appear instead.
you need some java script to implement this
<html>
<head>
<title>Test</title>
<script language="javascript">
function checkInput(ob) {
var invalidChars = /[^0-9]/gi
if(invalidChars.test(ob.value)) {
ob.value = ob.value.replace(invalidChars,"");
}
}
</script>
</head>
<body>
<input type="text" onkeyup="checkInput(this)"/>
</body>
</html>
Try this (utilizing jquery javascript library)
html
<input type="text" size="30" />
js (jquery library)
$(document).ready(function() {
$("input").attr("placeholder", "Please input numbers").change(function(e) {
var txt = /[a-z]/gi.test($(this).val());
if (txt) {
$(this).val("").attr("placeholder", "Not a number, please input numbers")
};
});
})
jsfiddle http://jsfiddle.net/guest271314/v2BRY/
Edit. Not certain if element
is input
ot textarea
, hope should work for either.
javascript, without utilizing jquery javascript library
html
<input type="text" size="30" />
javascript
function checkText() {
var textarea = document.querySelectorAll("input");
textarea[0].setAttribute("placeholder", "Please input numbers");
textarea[0].addEventListener("change", function(e) {
var txt = /[a-z]/gi.test(e.target.value);
if (txt) {
e.target.value = "";
e.target.setAttribute("placeholder", "Not a number, please input numbers");
};
}, false);
};
checkText()
jsfiddle http://jsfiddle.net/guest271314/pFu4K/
Hope this helps
If you use jQuery, you can do it like in this jsfiddle
$('input').keypress(function(e) {
var a = [];
var k = e.which;
for (i = 48; i < 58; i++)
a.push(i);
if (!(a.indexOf(k)>=0))
e.preventDefault();
});
Not sure if that was already available 8 years ago but the simplest way now to achieve what you want, if you want user to enter a date is:
<input type="date">
You should use this function to set input filters on various DOM
elements including textarea
function setInputFilter(textbox, inputFilter) {
["input", "keydown", "keyup", "mousedown", "mouseup", "select", "contextmenu", "drop"].forEach(function(event) {
textbox.addEventListener(event, function() {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (this.hasOwnProperty("oldValue")) {
this.value = this.oldValue;
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
} else {
this.value = "";
}
});
});
}
Then you simply set the filter, like that:
setInputFilter(document.getElementById("textarea_id"), value => {
return /^\d*$/.test(value); // Allow digits and '.' only, using a RegExp
});
I know I'm late to the party but I'm writing this here as a reminder for myself in the future.
The html:
<textarea (oninput)="validateValue(event)"></textarea>
The JavaScript:
function validateValue(event){
const elem = event.target;
const value = elem.value;
const numVal = value.replace(/\D/,"");
elem.value = numVal;
}
/\D/
is if you use copy + paste. Then only the first character will be filtered. Use /\D+/g
to solve this. –
Softboiled I did not get the solution from @Morfinismo to work out of the box. However some small modifications did the trick.
<textarea oninput="validateValue(this)"></textarea>
<script>
function validateValue(elem) {
const value = elem.value;
const numVal = value.replace(/\D+/g, "");
elem.value = numVal;
}
</script>
If you want to allow only numbers and new line character you can do it like this:
<textarea oninput="validateValue(this)"></textarea>
<script>
function validateValue(elem) {
const value = elem.value;
const numVal = value.replace(/[^\d\n]+/g, "");
elem.value = numVal;
}
</script>
© 2022 - 2024 — McMap. All rights reserved.