我的代码:
我试过下面的代码
<SCRIPT type="text/javascript">
var num = "10";
var expRegex = /^\d+$/;
if(expRegex.test(num))
{
alert('Integer');
}
else
{
alert('Not an Integer');
}
</SCRIPT>
我得到的结果是 Integer
。实际上我用双引号声明了 num
变量。显然它被认为是一个字符串
。实际上我需要得到 Not an Integer
的结果。如何更改 RegEx
以便我可以获得预期的结果。
在这种情况下,它应该给出 Not an Integer
的结果。但我得到的是 Integer
。
最佳答案
if(typeof num === "number" &&
Math.floor(num) === num)
alert('Integer');
else
alert('Not an Integer');
正则表达式可以处理字符串。因此,如果您尝试使用字符串以外的其他内容,则字符串要么被转换,要么会出现错误。而你的返回 true,因为显然该字符串只包含数字字符(这就是你要检查的内容)。
改用typeof
运算符。但是 JavaScript 没有专门用于 int
和 float
的类型。所以你必须自己做整数检查。如果 floor
没有改变值,那么你有一个整数。
还有一个警告。 Infinity
是一个 number
并且调用 Math.floor()
会再次导致 Infinity
,所以你得到那里的误报。你可以这样改变它:
if(typeof num === "number" &&
isFinite(num) &&
Math.floor(num) === num)
...
看到你的正则表达式你可能只想接受正整数:
if(typeof num === "number" &&
isFinite(num) &&
Math.floor(Math.abs(num)) === num)
...
关于javascript - 通过 Regex 仅检查整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13765134/