【问题标题】:Using a regular expression to validate whether input has any non digits in it使用正则表达式验证输入中是否有任何非数字
【发布时间】:2012-06-07 16:52:07
【问题描述】:
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 也不会被捕获。我可以通过在我的 if 语句中添加 '&&parseInt(theNumber)>0' 来解决这个问题,但我觉得 RegExp 也应该抓住这一点。提前致谢!

【问题讨论】:

  • 正则表达式不起作用,因为您需要转义 \ 字符,因为 \ 在字符串文字表示法中也有意义。 new RegExp('\\D','g');
  • ...另外,您实际上并不需要 g 修饰符,因为听起来即使是一个非数字也足以标记输入。
  • @amnotiam 感谢您提供有关为什么我正在做的事情不起作用的信息。正则表达式是我仍然陌生的东西。希望我能尽快改变。

标签: javascript regex validation integer expression


【解决方案1】:

简单地说:

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

Live DEMO

或者更简单的regex 仅由@Eric 建议:

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

Live DEMO

更新:

An excellent cheat sheet. 5年后链接失效了,抱歉。

【讨论】:

  • 不需要parseInt(theNumber) > 0: /^[1-9]\d*$/
  • @Eric。谢谢你的建议,我加了你的名字。
  • 我认为正则表达式会调用一个有效的空字符串,因为* 是“零或更多”,您可能想使用+ 而不是“一个或多个”
  • @jbabey。没关系。因为那是因为之前的[0-9]
  • @gdoron 哦,对了,* 仅适用于\d。明白了。
【解决方案2】:

如果可以不用RegExp,你可以:

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

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

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

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

【讨论】:

  • 你的意思可能是-1 < number
  • @amnotiam。 if(str.match())if (/.../.test(str)) 之间有什么区别(我知道他们做不同的事情)?
  • @gdoron:应该给出相同的布尔强制结果。我个人更喜欢.test()
【解决方案3】:

简单点!

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

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

【讨论】:

  • 取决于您希望如何评估十六进制表示法。 ('0xff' | 0) > 0; // true
  • ("+123" | 0) > 0 => true => 坏了... :)
猜你喜欢
  • 2014-07-03
  • 2011-01-27
  • 1970-01-01
  • 2022-07-18
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
相关资源
最近更新 更多