【问题标题】:what am I missing in this RegEx?我在这个正则表达式中缺少什么?
【发布时间】:2010-07-27 14:31:11
【问题描述】:

我正在尝试创建一个 JavaScript 正则表达式来测试:

一个介于 0 和 99.9 之间的有效 #(其中只允许一个十进制数字) 例如3.45 无效。

所以,空白是可以的,0到99之间的任何整数都可以,并且可以是十进制值。

到目前为止我有这个,但它允许像 3.45 这样的值通过:

$^|$[0-9][0-9]?^|$[0-9][0-9]?.[0-9]^

【问题讨论】:

  • function test(num) { return (0 <= num) && (num < 99.9) && (num*10 % 1 === 0); } 有什么问题?
  • 我需要先验证它是一个我知道的数字,不要太难.. isNaN()... 否则也可以。在我的特定场景中,正则表达式测试已经内置,因此插入它似乎是最简单的。
  • 05.5 是否被视为有效回复? .5呢?

标签: javascript regex numbers


【解决方案1】:

我可以看到两个问题:

  • 你把 ^ 和 $ 弄混了。
  • 您的小数点需要转义 \.

【讨论】:

  • 哇!我会花一整天时间与内心的比赛作斗争——谢谢你的摇头。
【解决方案2】:

Mark 已经说过你的表情有什么问题。这是另一种编写方式:

^(\d\d?(\.\d)?)?$

解释:

  • ^ 匹配字符串的开头
  • (...)? 使整数可选
  • $ 匹配字符串的结尾
  • \d\d? 匹配一位或两位数字(? 使第二位可选)
  • (\.\d)? 匹配一个点 . 和一个数字(? 使其可选)

【讨论】:

    【解决方案3】:

    我从来没有真正使用过很多 JavaScript,但这应该可以完成工作......

    ^[0-9][0-9]?(?:\.[0-9])?$
    

    【讨论】:

    • 糟糕,Felix Kling 在我打字的时候发帖了,虽然他考虑到了空白,但这两种模式非常相似,而我没有(错过了这个要求)。
    【解决方案4】:

    将你的正则表达式重写为:

    ^$|^[0-9][0-9]?$|^[0-9][0-9]?\.[0-9]$
    

    但更好的是,使用 Felix King 的。

    【讨论】:

      【解决方案5】:

      另一个变种是

      /^\d{0,2}(\.\d)?$/
      

      如果允许的话,它将接受像 .3 这样的数字。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-24
        • 2013-04-19
        • 1970-01-01
        • 2012-02-13
        • 1970-01-01
        • 2012-01-26
        相关资源
        最近更新 更多