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


75

我正在使用HTML和javascript中的表单。我希望仅在用户输入LETTER并单击时弹出警报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;
}
}

定义“字母”。是“é”字母吗?那“α”呢?如果您是指从A到Z以及从a到z的Ascii字母,请这样说。
Jukka K. Korpela

1
您可能还想更改HTML。切换<input type="text" /><input type="number" min="0" max="125" step="1" />。在现代浏览器中,这将检查没有任何JS的数字输入。
fboes

Answers:


119

您可以使用isNaN函数确定值是否不转换为数字。示例如下:

function checkInp()
{
  var x=document.forms["myForm"]["age"].value;
  if (isNaN(x)) 
  {
    alert("Must input numbers");
    return false;
  }
}

20
当心空字符串:isNaN('') === false;#jsrage
KFunk 2014年

12
请勿执行此操作,例如“ 0xFF”和“ 2e32”的字符串将通过此验证。
Matt McClellan 2014年

4
您不能用它来检查数字。如果字母跟随数字,则失败。试试这个“ 3a”。
Nidhin David

3
最疯狂的事实NAN也是一个数字:(
阿比吉斯AC


43

使用正则表达式仅匹配字母。如果您需要做一些更复杂的事情,例如确保它是一定数量的数字,那么了解这些知识也是一件好事。

function checkInp()
{
    var x=document.forms["myForm"]["age"].value;
    var regex=/^[a-zA-Z]+$/;
    if (!x.match(regex))
    {
        alert("Must input string");
        return false;
    }
}

更好的是拒绝数字以外的任何东西:

function checkInp()
{
    var x=document.forms["myForm"]["age"].value;
    var regex=/^[0-9]+$/;
    if (x.match(regex))
    {
        alert("Must input numbers");
        return false;
    }
}

15
您是否在第二个代码段中缺少!之前x.match(regex)
提交

2
这是最干净的解决方案
Faris Rayhan

还是你的意思regex.test(x)
Sonson Ixon '20年

12

您可以使用isNaN 函数。如果数据不是数字,则返回true。那将是这样的:

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

注意:isNan认为10.2是有效数字。


1
* isNaN-是的,这可能是个问题,是否有可能仅输入整数的方法?感谢你的回答。
格雷格·佩科里

1
仅对于整数,请使用正则表达式并查看我的答案。
金·克林

6

只需用1除以x%1即可找到余数。如果余数为0,则表示x是整数。否则,您必须显示消息“必须输入数字”。即使在字符串,十进制数字等情况下也可以使用。

function checkInp()
{
    var x = document.forms["myForm"]["age"].value;
    if ((x%1) != 0) 
    {
        alert("Must input numbers");
        return false;
    }
}

6

我知道这篇文章很旧,但这是我搜索时弹出的第一篇文章。我尝试了@Kim Kling RegExp,但失败了。同样在找到这个论坛之前,我尝试了这里列出的几乎所有其他变体。最后,除了我创建的那个之外,其他任何一个都不起作用。它工作正常,加上它是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");
    }
   




3

我认为最简单的方法是Number使用字符串创建一个对象,并isInteger借助Number类本身提供的功能来检查是否。

Number.isInteger(Number('1')) //true
Number.isInteger(Number('1 mango')) //false
Number.isInteger(Number(1)) //true
Number.isInteger(Number(1.9)) //false

当心Number(''); // 0
Sarath

0

如果您关心实数而不是字符串中的数字,则最好的现代方法是typeof(变量)。例如:

var a = 1;
var b = '1';

typeof a: // Output: "number"
typeof b: // Output: "string

0

谢谢,我使用@ str8up7od答案今天创建了一个函数,该函数还检查输入是否为空:

    function is_number(input) {
        if(input === '')
            return false;
        let regex = new RegExp(/[^0-9]/, 'g');
        return (input.match(regex) === null);
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.