检查输入是否为数字或字母JavaScript

89

我正在使用HTML和JavaScript中的表单。如果用户输入了字母并点击提交按钮,我希望弹出一个警告框。

因此,我有以下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
11个回答

139
您可以使用isNaN函数来确定一个值是否无法转换为数字。例如如下所示:

您可以使用isNaN函数来确定一个值是否无法转换为数字。例如如下所示:

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

25
小心空字符串:isNaN('') === false; #jsrage - KFunk
16
不要这样做,像“0xFF”和“2e32”这样的字符串将通过此验证。 - Matt McClellan
5
如果数字后面跟着字母,你就不能使用它来检查数字。试试这个“3a”。 - Nidhin David
6
最疯狂的事实是,NAN 也是一个数字 :( - Abhijith A C
@StormcrowSX,你对这个问题有什么看法?https://dev59.com/LWUq5IYBdhLWcg3wQ-bk - Kiquenet
1
该方法不可靠。 - Pablo Pazos

56

使用正则表达式匹配仅包含字母的内容。如果您需要执行更复杂的操作(例如确保它是某个数字的特定计数),了解这方面的知识也很有好处。

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

19
你的第二段代码片段中,x.match(regex)前面是否应该加上一个感叹号 ! - Submits
3
这是最简洁的解决方案。 - Faris Rayhan
1
你是指 regex.test(x) 吗? - Sonson Ixon

14
你可以使用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 - 是的,那可能是个问题,有没有可能只输入整数?感谢您的回答。 - Greg Peckory
1
仅针对整数,使用正则表达式并查看我的答案。 - Kim Kling

8
你可以使用isNaN()函数。当传入一个非数字的值时,它会返回true

var data = 'hello there';

if (isNaN(data)) {
  alert("it is not a valid number");
} else {
  alert("it is a valid number");
}


1
isNaN(true) 返回 false。 - Memet Olsen

7
更好(无错误)的代码应该是这样的:
function isReallyNumber(data) {
    return typeof data === 'number' && !isNaN(data);
}

这将处理空字符串。另一个原因是,isNaN("12") 等于 false 但是 "12" 是一个字符串而不是一个数字,所以结果应该为 true。最后附上一篇额外的链接可能会让您感兴趣。


另一个参考链接:https://dev59.com/LWUq5IYBdhLWcg3wQ-bk - Kiquenet

7

我知道这篇文章已经有点老了,但是当我搜索时它是第一个出现的。我尝试了@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");
    }
   

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

4

试试这个:

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

2
或者简单地写成 if ( (x >> 0) > 0 ) - Prasanth
工作得很好,只是小数问题仍然存在。不过还是非常感谢您的答案。 - Greg Peckory
3
你能详细解释一下它是如何工作的吗?>> 运算符代表什么意思?提前谢谢。 - sospedra
不幸的是,它对于“32!”给出了32而不是一个错误。 - Martin Jambon

3

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

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
Number.isInteger('1') 不会返回真。它会返回假。它仍然会被识别为字符串。 - aRtoo
传递 Number('1') - Vikas Bansal

2

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

    function is_number(input) {
        if(input === '')
            return false;
        let regex = new RegExp(/[^0-9]/, 'g');
        return (input.match(regex) === null);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接