我试图找到一个正则表达式,它接受十进制前最多5位数,小数点后最多2位数。十进制部分是可选的,如果0是唯一的数字,则不应接受。但是如果0后面跟着小数点后或其他数字,则接受。 例如:
有效数据为:12345.12,123.12,0.12,00.12,1.2,0123.12
无效数据为:0,00,000,0000,00000
我已经创建了一个表达式^\d{0,5}(\.\d{1,2})?$"
,但如果数字以0开头,则不起作用。
答案 0 :(得分:4)
^(?!0+$)\d{0,5}(.\d{1,2})?$
^^^^^^^
如果只找到lookahead
,只需添加0
,这会使正则表达式失败。
编辑:
如果您不想允许0.0
使用
^(?!0+(\.0+)?$)\d{0,5}(.\d{1,2})?$
答案 1 :(得分:0)
答案 2 :(得分:0)
不允许使用空字符串,但00001.01之类的值有效
您可以将以下正则表达式用于检查不允许值的负向预测:
^(?!$)(?!0+$)\d{0,5}(?:\.(?!0{1,2}$)\d{1,2})?$
^^^^^ ^^^^^ ^^^^^^^^^
请参阅demo
正则表达式分解:
^
- 字符串开头(?!$)
- 确保字符串不为空(字符串的结尾不会在开头之后出现)(?!0+$)
- 确保整数不仅包含零\d{0,5}
- 0到5位(?:\.(?!0{1,2}$)\d{1,2})?
- 一个可选的序列...
\.
- 小数时段(?!0{1,2}$)\d{1,2}
- 非\d{1,2}
或0
(00
)(?!0{1,2}$)
)
$
- 字符串结尾