6
function validInteger(theNumber){
    var anyNonDigits = new  RegExp('\D','g');
    if(parseInt(theNumber)&&!anyNonDigits.test(theNumber)){
        return true;
    }else{
        return false;
    }
}

以上是我为验证某些输入而编写的函数。我想要所有正整数。我面临的问题是 RegExp 对象。这似乎应该非常简单,但由于某种原因它不起作用。

例如,如果我通过'f5',我得到真,但如果我通过'5f',我得到假。传递负数时我也遇到问题。即使我在将变量传递给 RegExp 之前对变量进行字符串化,-3 也不会被捕获。我可以通过&&parseInt(theNumber)>0在 if 语句中添加 ' ' 来解决这个问题,但我觉得 RegExp 也应该抓住它。提前致谢!

4

3 回答 3

11

简单地:

function validInteger(theNumber){    
    return theNumber.match(/^\d+$/) && parseInt(theNumber) > 0;
}

现场演示

或者更简单,regex仅按照@Eric的建议:

return /^[0-9]\d*$/.test(theNumber);

现场演示

更新:

一个优秀的备忘单。链接在 5 年后失效,对不起。

于 2012-06-07T16:55:00.703 回答
1

如果可以不使用 RegExp,您可以拥有:

function validInteger(theNumber){
    var number = +theNumber;

    return number > -1 && number % 1 === 0;
}

假设您将 0 视为正整数,并且您不想区分 +0 和 -0。

请注意,此函数将接受任何theNumber可以转换为数字的值,因此不仅仅是“字符串”,当然您也可以传递数字。

于 2012-06-07T17:01:15.263 回答
0

简单点!

function validate(num){
    return (num | 0) > 0;
};

此函数仅对正整数返回“true”。

于 2012-06-07T17:06:41.317 回答