1

我的代码:

我尝试了以下代码

<SCRIPT type="text/javascript"> 

var num = "10";
var expRegex = /^\d+$/;

if(expRegex.test(num)) 
{
   alert('Integer');
}
else
{
   alert('Not an Integer');
}

</SCRIPT>

我得到的结果为Integer。实际上我num用双引号声明了变量。显然它被认为是一个string. 实际上我需要得到结果为Not an Integer. 如何更改,RegEx以便我可以获得预期的结果。

在这种情况下,它的结果应该是Not an Integer。但我越来越像Integer

4

3 回答 3

5
if(typeof num === "number" &&
   Math.floor(num) === num)
    alert('Integer');
else
    alert('Not an Integer');

正则表达式可用于处理字符串。因此,如果您尝试使用字符串以外的其他内容,则该字符串要么被转换,要么您会收到错误。而你的返回 true,因为显然字符串只包含数字字符(这就是你要检查的)。

请改用typeof运算符。但是 JavaScript 没有专门的int和类型float。所以你必须自己做整数检查。如果floor不改变值,那么你有一个整数。

还有一个警告。Infinity是 anumber并且调用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)
    ...
于 2012-12-07T14:35:38.057 回答
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
于 2012-12-07T14:46:20.857 回答
0

我认为使用 isNaN() 更容易。

if(!isNaN(num))
{
    alert('Integer !');
}
else
{
    alert('Not an Integer !');
}

莱昂

于 2012-12-07T14:39:05.027 回答