I need to make sure that a certain <input>
field only takes numbers as value.
The input is not part of a form. Hence it doesn't get submitted, so validating during submission is not an option. I want the user to be unable to type in any characters other than numbers.
Is there a neat way to achieve this?
This question is related to
html
input
numbers
validating
Simple enough?
inputField.addEventListener('input', function () {_x000D_
if ((inputField.value/inputField.value) !== 1) {_x000D_
console.log("Please enter a number");_x000D_
}_x000D_
});
_x000D_
<input id="inputField" type="text">
_x000D_
<input
onkeyup="value=isNaN(parseFloat(value))?1000:value"
type="number"
value="1000"
>
onkeyup
triggers when the key is released.
isNaN(parseFloat(value))?
checks if the input value is not a number.
If it is not a number the value is set to 1000 :
If it is a number the value is set to the value.
note: For some reason it only works with type="number"
To make it even more exiting, you can also have a boundary:
<input
onkeyup="value=isNaN(parseFloat(value))||value<0||value>9000?1000:value"
type="number"
value="1000"
>
Enjoy!
http://www.texotela.co.uk/code/jquery/numeric/ numeric input credits to Leo Vu for mentioning this and of course TexoTela. with a test page.
You can use the <input>
tag with attribute type='number'.
For example you can use <input type='number' />
This input field allows only numerical values. You can also specify the minimum value and maximum value that should be accepted by this field.
Please try this code along with the input field itself
<input type="text" name="price" id="price_per_ticket" class="calculator-input" onkeypress="return event.charCode >= 48 && event.charCode <= 57"></div>
it will work fine.
Please see my project of the cross-browser filter of value of the text input element on your web page using JavaScript language: Input Key Filter . You can filter the value as an integer number, a float number, or write a custom filter, such as a phone number filter. See an example of code of input an integer number:
<!doctype html>_x000D_
<html xmlns="http://www.w3.org/1999/xhtml" >_x000D_
<head>_x000D_
<title>Input Key Filter Test</title>_x000D_
<meta name="author" content="Andrej Hristoliubov [email protected]">_x000D_
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>_x000D_
_x000D_
<!-- For compatibility of IE browser with audio element in the beep() function._x000D_
https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->_x000D_
<meta http-equiv="X-UA-Compatible" content="IE=9"/>_x000D_
_x000D_
<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css"> _x000D_
<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>_x000D_
<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>_x000D_
_x000D_
</head>_x000D_
<body>_x000D_
<h1>Integer field</h1>_x000D_
<input id="Integer">_x000D_
<script>_x000D_
CreateIntFilter("Integer", function(event){//onChange event_x000D_
inputKeyFilter.RemoveMyTooltip();_x000D_
var elementNewInteger = document.getElementById("NewInteger");_x000D_
var integer = parseInt(this.value);_x000D_
if(inputKeyFilter.isNaN(integer, this)){_x000D_
elementNewInteger.innerHTML = "";_x000D_
return;_x000D_
}_x000D_
//elementNewInteger.innerText = integer;//Uncompatible with FireFox_x000D_
elementNewInteger.innerHTML = integer;_x000D_
}_x000D_
_x000D_
//onblur event. Use this function if you want set focus to the input element again if input value is NaN. (empty or invalid)_x000D_
, function(event){ inputKeyFilter.isNaN(parseInt(this.value), this); }_x000D_
);_x000D_
</script>_x000D_
New integer: <span id="NewInteger"></span>_x000D_
</body>_x000D_
</html>
_x000D_
Also see my page "Integer field:" of the example of the input key filter
For general purpose, you can have JS validation as below:
It will work for Numeric keypad and normal number key's
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode < 31 || (charCode >= 48 && charCode <= 57 ) || (charCode >= 96 && charCode <= 105 ))
return true;
return false;
}
<input name="someid" type="number" onkeypress="return isNumberKey(event)"/>
I updated some answers posted to add the following:
Specify how many numbers after the decimal point is allowed.
String.prototype.isDecimal = function isDecimal(evt,decimalPts) {
debugger;
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode != 46 && (charCode < 48 || charCode > 57)))
return false;
//Prevent more than one point
if (charCode == 46 && this.includes("."))
return false;
// Restrict the needed decimal digits
if (this.includes("."))
{
var number = [];
number = this.split(".");
if (number[1].length == decimalPts)
return false;
}
return true;
};
<input type="text" name="myinput" id="myinput" onkeypress="return isNumber(event);" />
and in the js:
function isNumber(e){
e = e || window.event;
var charCode = e.which ? e.which : e.keyCode;
return /\d/.test(String.fromCharCode(charCode));
}
or you can write it in a complicated bu useful way:
<input onkeypress="return /\d/.test(String.fromCharCode(((event||window.event).which||(event||window.event).which)));" type="text" name="myinput" id="myinput" />
Note:cross-browser and regex in literal.
if you can use HTML5 you can do <input type="number" />
If not you will have to either do it through javascript as you said it doesnt get submited to do it from codebehind.
<input id="numbersOnly" onkeypress='validate()' />
function validate(){
var returnString;
var text = document.getElementByID('numbersOnly').value;
var regex = /[0-9]|\./;
var anArray = text.split('');
for(var i=0; i<anArray.length; i++){
if(!regex.test(anArray[i]))
{
anArray[i] = '';
}
}
for(var i=0; i<anArray.length; i++) {
returnString += anArray[i];
}
document.getElementByID('numbersOnly').value = returnString;
}
P.S didnt test the code but it should be more or less correct if not check for typos :D You might wanna add a few more things like what to do if the string is null or empty etc. Also you could make this quicker :D
I fought with this one for a bit. Many solutions here and elsewhere seemed complicated. This solution uses jQuery/javascript alongside HTML.
<input type="number" min="1" class="validateNumber">
$(document).on('change', '.validateNumber', function() {
var abc = parseInt($(this).val());
if(isNaN(abc)) { abc = 1; }
$(this).val(abc);
});
In my case I was tracking small quantities with a minimum value of 1, hence the min="1" in the input tag and abc = 1 in the isNaN() check. For positive only numbers you could change those values to 0 and even simply remove the min="1" from the input tag to allow for negative numbers.
Also this works for multiple boxes (and could save you some load time over doing them individually by id), just add the "validateNumber" class where needed.
Explanation
parseInt() basically does what you need, except that it returns NaN rather than some integer value. With a simple if() you can set the "fallback" value that you prefer in all the cases NaN is returned :-). Also W3 states here that the global version of NaN will type cast before checking which gives some extra proofing (Number.isNaN() does not do that). Any values sent to a server/backend should still be validated there!
The accepted answer:
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
It's good but not perfect. It works out for me, but i get a warning that the if-statement can be simplified.
Then it looks like this, which is way prettier:
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : event.keyCode;
return !(charCode > 31 && (charCode < 48 || charCode > 57));
}
Would comment the original post, but my reputation is too low to do so (just created this account).
function AllowOnlyNumbers(e) {_x000D_
_x000D_
e = (e) ? e : window.event;_x000D_
var clipboardData = e.clipboardData ? e.clipboardData : window.clipboardData;_x000D_
var key = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;_x000D_
var str = (e.type && e.type == "paste") ? clipboardData.getData('Text') : String.fromCharCode(key);_x000D_
_x000D_
return (/^\d+$/.test(str));_x000D_
}
_x000D_
<h1>Integer Textbox</h1>_x000D_
<input type="text" autocomplete="off" id="txtIdNum" onkeypress="return AllowOnlyNumbers(event);" />
_x000D_
JSFiddle: https://jsfiddle.net/ug8pvysc/
You can also use the pattern attribute in html5:
<input type="text" name="name" pattern="[0-9]" title="Title" />
Although, if your doctype isn't html
then I think you'll need to use some javascript/jquery.
if not integer set 0
<input type="text" id="min-value" />
$('#min-value').change(function ()
{
var checkvalue = $('#min-value').val();
if (checkvalue != parseInt(checkvalue))
$('#min-value').val(0);
});
When using this code you cant use "BackSpace Button" in Mozilla Firefox you can only use backspace in Chrome 47 && event.charCode < 58;" pattern="[0-9]{5}" required>
I use this for Zip Codes, quick and easy.
<input type="text" id="zip_code" name="zip_code" onkeypress="return event.charCode > 47 && event.charCode < 58;" pattern="[0-9]{5}" required></input>
How about using <input type="number"...>
?
http://www.w3schools.com/tags/tag_input.asp
Also, here is a question that has some examples of using Javascript for validation.
Update: linked to better question (thanks alexblum).
I have used regular expression to replace the input value with the pattern needed.
var userName = document.querySelector('#numberField');_x000D_
_x000D_
userName.addEventListener('input', restrictNumber);_x000D_
function restrictNumber (e) { _x000D_
var newValue = this.value.replace(new RegExp(/[^\d]/,'ig'), "");_x000D_
this.value = newValue;_x000D_
}_x000D_
_x000D_
<input type="text" id="numberField">
_x000D_
It's better to add "+" to REGEX condition in order to accept multiple digits (not only one digit):
<input type="text" name="your_field" pattern="[0-9]+">
You can use an <input type="number" />
. This will only allow numbers to be entered into othe input box.
Example: http://jsfiddle.net/SPqY3/
Please note that the input type="number"
tag is only supported in newer browsers.
For firefox, you can validate the input by using javascript:
Update 2018-03-12: Browser support is much better now it's supported by the following:
Quick and Easy Code
<input type="text" onkeypress="return (event.charCode !=8 && event.charCode ==0 || (event.charCode >= 48 && event.charCode <= 57))" />
This will permit usage of numbers and backspace only.
If you need decimal part too, use this code fragment
<input type="text" onkeypress="return (event.charCode !=8 && event.charCode ==0 || ( event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)))" />
Add inside your input tag: onkeyup="value=value.replace(/[^\d]/g,'')"
One way could be to have an array of allowed character codes and then use the Array.includes
function to see if entered character is allowed.
Example:
<input type="text" onkeypress="return [45, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57].includes(event.charCode);"/>
Source: Stackoverflow.com