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