检查输入是数字还是字母 javascript

我使用 HTML 和 javascript 中的表单。我希望只有当用户输入一个 并单击 submit时才会弹出一个警报。

所以我有 HTML 代码:

<form name="myForm" action="" onsubmit="return checkInp()" method="post">
First name: <input type="text" name="age">
<input type="submit" value="Submit">

还有 javascript 代码:

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;
}
}
420685 次浏览

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.

Try this:

if(parseInt("0"+x, 10) > 0){/* x is integer */}

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;
}
}

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");
}

Use Regular Expression 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;
}
}

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.

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;
}
}

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");
}
   

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

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

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);
}