我的代码:
我尝试了以下代码
<SCRIPT type="text/javascript">
var num = "10";
var expRegex = /^\d+$/;
if(expRegex.test(num))
{
alert('Integer');
}
else
{
alert('Not an Integer');
}
</SCRIPT>
我的结果为Integer
。实际上我用双引号声明了num
varibale。显然它被认为是string
。实际上我需要得到Not an Integer
的结果。如何更改RegEx
以便我可以获得预期的结果。
在这种情况下,它应该将结果显示为Not an Integer
。但我得到了Integer
。
答案 0 :(得分:5)
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)
...
答案 1 :(得分:2)
RegExp用于字符串。您可以检查typeof num == 'number'
但是您需要对浮点数等执行多次检查。您还可以使用小的按位运算符来检查整数:
function isInt(num) {
num = Math.abs(num); // if you want to allow negative (thx buettner)
return num >>> 0 == num;
}
isInt(10.1) // false
isInt("10") // false
isInt(10) // true
答案 2 :(得分:0)
我认为使用isNaN()更容易。
if(!isNaN(num))
{
alert('Integer !');
}
else
{
alert('Not an Integer !');
}
列昂