【问题标题】:Regular expression for positive decimal number with 0, 1 or 2 decimal places带有 0、1 或 2 位小数的正十进制数的正则表达式
【发布时间】:2011-07-20 01:05:13
【问题描述】:

请帮我为带有 0、1 或 2 位小数的正十进制数制作正则表达式。它必须允许逗号和点。 例如它必须允许:

0,01
0.01
0,1
1
1.1
1,11

但不允许:

-1
0.0
0,00
.01
0
1,111
1.111

我有这个 /(^\d*(?:\.|\,)?\d*[1-9]+\d*$)|(^[1-9]+\d*(?:\.|\,)\d*$)/ 但我找不到如何禁止超过 2 个小数位。

更新 男人们,我必须拒绝0.0、0等。

【问题讨论】:

  • 我将在jQuery自定义验证方法中使用它,所以它用于javascript。

标签: regex


【解决方案1】:

编辑 2:现在不允许正好 0,0.0 等。

这匹配小数点前至少一位,后跟可选的小数位,后跟 0-2 位。

负前瞻会寻找绝对零的任何形式并阻止匹配。

^(?!0*[.,]0*$|[.,]0*$|0*$)\d+[,.]?\d{0,2}$

这是原始的正则表达式,因此您需要根据您的语言对其进行适当的转义。 (例如,在某些语言中,您需要将\ 斜杠加倍为\\

/^(?!0*[.,]0*$|[.,]0*$|0*$)\d+[,.]?\d{0,2}$/

【讨论】:

  • 谢谢!它比其他更接近,但它仍然允许 0。我可以让它像“00”、“000”等那样拒绝吗?
【解决方案2】:

对我来说,到目前为止你所得到的似乎是不必要的复杂。怎么样

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

这对于 OP 中的每个测试用例都是正确的,除了:

0.0
0,00
0

我不明白你为什么会拒绝这些。

【讨论】:

  • 正是,这就是这里的问题,它不应该允许这些00,0
【解决方案3】:

您可以使用括号概念来限制位数:

\d{0,2} 表示从最小 0 到最大 2 的任何数字运行

【讨论】:

  • 就其本身而言,\d{0,2} 错误地匹配字符串 0.123456 中的 12。 (它也匹配3456。)
【解决方案4】:
/^\d+([.,]\d{1,2})?$/

这将正确地禁止这些“未格式化”数字.013. 等。

如果我们的小数位数为零,我们可能也不需要小数分隔符。

【讨论】:

    【解决方案5】:

    这会做你想做的。

    我添加了空格、cmets 和括号来澄清它:

    (                   #
      ( 0*[1-9]\d*   )  # a non-zero integer portion, followed by
      ( [\.,]\d{1,2} )? # an optional fraction of 1 or 2 decimal digits
    )                   # 
    |                   # OR
    (                   #
      ( 0+ )            # a zero integer portion, followed by
      (                 # an mandatory non-zero 1-2 digit fraction, consisting of
        [\.,]           # a decimal point
        (               # followed by 
          ( 0[1-9]   )  # a 0 followed by a 1-9,
          |             # OR
          ( [1-9]\d? )  # a 1-9 followed by an optional decimal digit
      )
    )
    

    正则表达式不是最理想的,当它在整数部分的零后面找不到非零数字时,像 0000000000.01 这样的表达式会回溯,但它应该可以工作。

    【讨论】:

    • 我刚刚意识到我上面的正则表达式将接受 0 w/o 分数。固定!
    猜你喜欢
    • 2023-03-24
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多