JavaScript-测试整数

JavaScript-测试整数,javascript,Javascript,我有一个文本字段,允许用户输入他们的年龄。我正在尝试使用JavaScript对该字段进行一些客户端验证。我已经有了服务器端验证。但是,我似乎无法验证用户是否输入了实际的整数。我目前正在尝试以下代码: function IsValidAge(value) { if (value.length == 0) { return false; } var intValue = parseInt(value);

我有一个文本字段,允许用户输入他们的年龄。我正在尝试使用JavaScript对该字段进行一些客户端验证。我已经有了服务器端验证。但是,我似乎无法验证用户是否输入了实际的整数。我目前正在尝试以下代码:

    function IsValidAge(value) {
        if (value.length == 0) {
            return false;
        }

        var intValue = parseInt(value);
        if (intValue == Number.NaN) {
            return false;
        }

        if (intValue <= 0)
        {
            return false;
        }
        return true;
    }
函数有效性(值){
如果(value.length==0){
返回false;
}
var intValue=parseInt(值);
if(intValue==Number.NaN){
返回false;
}
if(intValue)
如果用户输入的不是非负整数,则该操作绝对会失败。

使用isNaN(n)

i、 e

代替

if (intValue == Number.NaN)

对于实整数检查,请使用以下方法:

function isInt(value) { 
    return !isNaN(parseInt(value,10)) && (parseFloat(value,10) == parseInt(value,10)); 
}
许多整型检查的问题是,对于1.0,它们返回“false”,这是一个有效的整数。此方法检查以确保float和int解析的值相等,因此对于#.00,它将返回true

更新:

在我将为未来读者补充答案的评论中讨论了两个问题:

  • 首先,当解析使用逗号表示小数点的字符串值时,这种方法不起作用(毫不奇怪,它怎么会起作用?例如,在美国,它是一个整数,而在德国它不是。)
  • 第二,自编写此答案以来,parseFloat和parseInt的行为在某些浏览器中发生了变化,并因浏览器而异。parseInt更具攻击性,将丢弃字符串中出现的字母。这对于获取数字很有帮助,但对于验证则不太好

我的建议和实践是使用一个库来解析UI的数值,而不是浏览器实现,并且只对已知的“以编程方式”提供的值使用本机调用,例如从XML文档解析的字符串。

更新

我已经修复了有错误的代码,并添加了一个名为key的变量,以使用keyCode存储按键代码,这取决于浏览器

var key = e.which || e.keyCode;
谢谢唐纳德。麦克莱恩:)


如果要检查键入时是否正在写入数字(并避免在输入字段中写入其他字符),可以使用此简单函数并定义允许的元素(包括要筛选的任何内容)。通过这种方式,您不仅可以选择整数,还可以选择一组字符。该示例基于jQuery将其附加到输入字段

$('#myInputField').keypress(function(e)
{
    var key = e.which || e.keyCode;

    if (!(key >= 48 && key <= 57) && // Interval of values (0-9)
         (key !== 8) &&              // Backspace
         (key !== 9) &&              // Horizontal tab
         (key !== 37) &&             // Percentage
         (key !== 39) &&             // Single quotes (')
         (key !== 46))               // Dot
    {
        e.preventDefault();
        return false;
    }
});
要使用此新指令,只需在如下输入类型文本中执行,例如:

<input type="text" rs-integer="true">


希望对您有所帮助。

我这样做是为了检查数字和整数值

if(isNaN(field_value * 1) || (field_value % 1) != 0 ) not integer;
else integer;
模除法

示例
1.25.5%1!=0和,
2.25%1==0

及 如果(字段_值*1)NaN如果字符串例如:25、34或abcd等。。。
else integer或number

如果您的数字在32位整数范围内,您可以选择以下选项:

function isInt(x) { return ""+(x|0)==""+x; }
按位or运算符强制转换为有符号32位整数。 两侧的字符串转换确保要匹配true/false

函数isInt(x){返回数学楼层(x)==x;}


您可以使用对象的
isInteger()
方法
Number

if ( (new Number(x)).isInteger() ) {
  // handle integer
}

如果
x
未定义的
空的
,则此方法可以正常工作。但目前它已

我发现缺少NaN响应,因为它们没有拾取尾随字符(因此“123abc”被视为有效数字)因此,我尝试将字符串转换为整数,然后再转换回字符串,并确保转换后的字符串与原始字符串匹配:

if ("" + parseInt(stringVal, 10) == stringVal) { alert("is valid number"); }
这对我来说很有效,直到数字如此之大,以至于在转换过程中开始出现科学符号

…当然,这意味着你可以在科学记数法中输入一个数字,但如果你愿意的话,检查最小值和最大值也可以防止这种情况发生

如果您使用分隔符(如“1000”或“1.000”,具体取决于您的语言环境)-此处只允许使用数字,则它当然会失败。

if(enteredAge“130”)。。。。。。
If (enteredAge < "1" || enteredAge > "130") ......

简单而且有效……直到他们长生不老

没有人尝试过这个简单的东西

function isInt(value) {
    return value == parseInt(value, 10);
}

这有什么问题?

请注意,您应该始终使用两个参数调用parseInt(),即值和基数(base)。否则,parseInt()将尝试猜测输入的基数。如果用户输入“1.1”,您希望验证失败,还是被迫为“1”?就此而言,是“1.0”整数?MDN提到:使用
Number.isNaN()
isNaN()
最清楚地确定一个值是否为
NaN
。如果用户输入负整数,这也会失败。(当然,年龄不是负的,但您应该明确测试的是任何整数还是任何非负整数。)带有一个整数元素的数组也返回true(intRegex.test([42]))对于未来的访问者,这个答案将在中解释。修复正则表达式以处理负数不是一个问题。
var intRegex=/^-?\d+$/;
@Cesar,据我所知,没有任何编程语言将1,2视为整数或任何单个数值。@ThaMe90这是真的,但在我的例子中,我使用的是isInt函数打开以验证外部输入。“1,2”在某些使用逗号作为十进制分隔符的国家/地区是一个有效数字。请参阅:
函数isInt(value){return!isNaN(parseInt(value,10))&&parseInt(value,10)=parseFloat(value);}
在上述情况下应该可以工作。不要使用此算法!它会告诉您
isInt('5a'))==true
!我使用了几乎相同的方法,在原始值和转换值的
toString
方法上添加了一个测试:
var-isint=function(a){return((parseInt(a)==parseFloat(a))&&(a.toString()=
if ( (new Number(x)).isInteger() ) {
  // handle integer
}
if ("" + parseInt(stringVal, 10) == stringVal) { alert("is valid number"); }
If (enteredAge < "1" || enteredAge > "130") ......
function isInt(value) {
    return value == parseInt(value, 10);
}