Check if input is number or letter javascript
JavascriptHtmlFormsInputJavascript Problem Overview
I'm using forms in HTML and javascript. I would like an alert to pop up only if the user inputs a LETTER and clicks submit
.
So I have the HTML code:
<form name="myForm" action="" onsubmit="return checkInp()" method="post">
First name: <input type="text" name="age">
<input type="submit" value="Submit">
And the javascript code:
function checkInp()
{
var x=document.forms["myForm"]["age"].value;
if (x consists of any letters) // this is the code I need to change
{
alert("Must input numbers");
return false;
}
}
Javascript Solutions
Solution 1 - Javascript
You can use the isNaN function to determine if a value does not convert to a number. Example as below:
function checkInp()
{
var x=document.forms["myForm"]["age"].value;
if (isNaN(x))
{
alert("Must input numbers");
return false;
}
}
Solution 2 - Javascript
Use [Regular Expression][1] to match for only letters. It's also good to have knowledge about, if you ever need to do something more complicated, like make sure it's a certain count of numbers.
function checkInp()
{
var x=document.forms["myForm"]["age"].value;
var regex=/^[a-zA-Z]+$/;
if (!x.match(regex))
{
alert("Must input string");
return false;
}
}
Even better would be to deny anything but numbers:
function checkInp()
{
var x=document.forms["myForm"]["age"].value;
var regex=/^[0-9]+$/;
if (x.match(regex))
{
alert("Must input numbers");
return false;
}
}
[1]: http://en.wikipedia.org/wiki/Regular_expression "Regular Expression"
Solution 3 - Javascript
You could use the isNaN Function. It returns true if the data is not a number. That would be something like that:
function checkInp()
{
var x=document.forms["myForm"]["age"].value;
if (isNaN(x)) // this is the code I need to change
{
alert("Must input numbers");
return false;
}
}
Note: isNan considers 10.2 as a valid number.
Solution 4 - Javascript
you can use isNaN(). it returns true when data is not number.
var data = 'hello there';
if(isNaN(data)){
alert("it is a valid number");
}else {
alert("it is not a valid number");
}
Solution 5 - Javascript
Just find the remainder by dividing by 1, that is x%1. If the remainder is 0, it means that x is a whole number. Otherwise, you have to display the message "Must input numbers". This will work even in the case of strings, decimal numbers etc.
function checkInp()
{
var x = document.forms["myForm"]["age"].value;
if ((x%1) != 0)
{
alert("Must input numbers");
return false;
}
}
Solution 6 - Javascript
I know this post is old but it was the first one that popped up when I did a search. I tried @Kim Kling RegExp but it failed miserably. Also prior to finding this forum I had tried almost all the other variations listed here. In the end, none of them worked except this one I created; it works fine, plus it is es6:
const regex = new RegExp(/[^0-9]/, 'g');
const val = document.forms["myForm"]["age"].value;
if (val.match(regex)) {
alert("Must be a valid number");
}
Solution 7 - Javascript
Try this:
if(parseInt("0"+x, 10) > 0){/* x is integer */}
Solution 8 - Javascript
A better(error-free) code would be like:
function isReallyNumber(data) {
return typeof data === 'number' && !isNaN(data);
}
This will handle empty strings as well. Another reason, isNaN("12")
equals to false
but "12"
is a string and not a number, so it should result to true
. Lastly, a bonus link which might interest you.
Solution 9 - Javascript
I think the easiest would be to create a Number
object with the string and check if with the help of isInteger
function provided by Number
class itself.
Number.isInteger(Number('1')) //true
Number.isInteger(Number('1 mango')) //false
Number.isInteger(Number(1)) //true
Number.isInteger(Number(1.9)) //false
Solution 10 - Javascript
The best and modern way is typeof (variable) if you care about real number not number from string. For example:
var a = 1;
var b = '1';
typeof a: // Output: "number"
typeof b: // Output: "string
Solution 11 - Javascript
Thanks, I used @str8up7od answer to create a function today which also checks if the input is empty:
function is_number(input) {
if(input === '')
return false;
let regex = new RegExp(/[^0-9]/, 'g');
return (input.match(regex) === null);
}