82

我在 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;
}
}
4

11 回答 11

130

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

function checkInp()
{
  var x=document.forms["myForm"]["age"].value;
  if (isNaN(x)) 
  {
    alert("Must input numbers");
    return false;
  }
}
于 2013-08-04T10:56:00.247 回答
52

使用正则表达式仅匹配字母。如果你需要做一些更复杂的事情,比如确保它是一定数量的数字,了解它也是很好的。

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;
    }
}
于 2013-08-04T11:02:16.340 回答
13

您可以使用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 视为有效数字。

于 2013-08-04T10:54:32.657 回答
8

你可以使用 isNaN()。当数据不是数字时返回true。

var data = 'hello there';
if(isNaN(data)){
  alert("it is a valid number");
}else {
  alert("it is not a valid number");
}
于 2013-08-04T10:58:12.267 回答
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");
    }
   
于 2017-09-25T15:32:11.307 回答
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;
    }
}
于 2016-01-28T18:08:22.773 回答
4

尝试这个:

if(parseInt("0"+x, 10) > 0){/* x is integer */}
于 2013-08-04T10:55:47.687 回答
4

更好的(无错误)代码如下:

function isReallyNumber(data) {
    return typeof data === 'number' && !isNaN(data);
}

这也将处理空字符串。另一个原因,isNaN("12")等于false但是"12"一个字符串而不是一个数字,所以它应该导致true. 最后,您可能会感兴趣的奖励链接。

于 2015-12-13T17:01:08.960 回答
3

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

Number.isInteger(Number('1')) //true
Number.isInteger(Number('1 mango')) //false
Number.isInteger(Number(1)) //true
Number.isInteger(Number(1.9)) //false
于 2017-10-23T11:52:48.227 回答
0

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

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

typeof a: // Output: "number"
typeof b: // Output: "string
于 2018-05-16T02:16:04.673 回答
0

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

    function is_number(input) {
        if(input === '')
            return false;
        let regex = new RegExp(/[^0-9]/, 'g');
        return (input.match(regex) === null);
    }
于 2020-07-08T03:26:14.847 回答