请帮我正则表达正十进制数,小数点后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等等。
答案 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})?$/
这将正确禁止这些“未格式化”的数字.01
,3.
等。
如果我们有零小数位数,我们可能也不想要小数点分隔符。
答案 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在整数部分中的零之后没有找到非零数字时会回溯,但是它应该有效。