Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用正则表达式验证输入中是否有任何非数字_Javascript_Regex_Validation_Integer_Expression - Fatal编程技术网

Javascript 使用正则表达式验证输入中是否有任何非数字

Javascript 使用正则表达式验证输入中是否有任何非数字,javascript,regex,validation,integer,expression,Javascript,Regex,Validation,Integer,Expression,上面是我为验证某些输入而编写的函数。我要所有的正整数。我面临的问题是RegExp对象。这看起来应该非常简单,但由于某种原因它不起作用 例如,如果我通过'f5'我得到真,但如果我通过'5f'我得到假。我传递负数时也有问题-即使在将变量传递到RegExp之前对其进行字符串化,3也不会被捕获。我可以通过在if语句中添加“&&parseInt(theNumber)>0”来解决这个问题,但我觉得RegExp也应该捕捉到这个问题。提前谢谢 简单地说: function validInteger(theNum

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

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

简单地说:

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

或者更简单地使用
regex
,只需@Eric建议:

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

更新:


链接在5年后死亡,很抱歉。

如果可以,请不要使用RegExp,您可以:

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

假设你把0看成是正整数,而不想区分+0和-0。

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

简单点

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

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

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

正则表达式不起作用,因为您需要转义
\
字符,因为
\
在字符串文字符号中也有意义<代码>新的RegExp('\\D','g')…此外,您也不需要使用
g
修饰符,因为听起来即使是一个非数字也足以标记输入。@amnotiam感谢您提供有关我所做的工作不起作用的原因的信息。正则表达式是我还不熟悉的东西。希望我能尽快改变。不需要
parseInt(theNumber)>0
/^[1-9]\d*$/
@Eric。谢谢你的建议,我在上面加了你的名字。我想正则表达式会调用一个有效的空字符串,因为
*
是“零或更多”,你可能想用
+
代替“一个或多个”@jbabey。这没问题,因为之前的
[0-9]
。@gdoron哦,对了,
*
只适用于
\d
。明白了。你可能是说
-1
?@amnotiam。
if(str.match())
if(/…/.test(str))
之间有什么区别吗(我知道它们做的事情不同)?@gdoron:应该给出相同的布尔强制结果。我个人更喜欢
.test()
。这取决于您希望如何计算十六进制表示法<代码>('0xff'| 0)>0;//真的
(“+123”| 0)>0
=>
真的
=>坏了<代码>:)
function validate(num){
    return (num | 0) > 0;
};