正十进制数的正则表达式,小数位数为0,1或2

时间:2011-07-15 13:10:04

标签: regex

请帮我正则表达正十进制数,小数点后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等等。

5 个答案:

答案 0 :(得分:5)

编辑2:现在完全不允许0,0.0等

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

负向前瞻查找绝对零度的任何风格并阻止匹配。

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

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

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

答案 1 :(得分:3)

到目前为止你所得到的东西对我来说似乎有点不必要了。怎么样只是

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

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

0.0
0,00
0

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

如果我们有零小数位数,我们可能也不想要小数点分隔符。

答案 4 :(得分:1)

这将做你想要的。

我添加了空格,注释和括号以澄清它:

(                   #
  ( 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在整数部分中的零之后没有找到非零数字时会回溯,但是它应该有效。