我创建了这个正则表达式:
^$|^[1-9]+([\.,]\d{0,2})?$
它应该接受:
1
11,00
100,88 (error)
100 (error)
11.00
100.88
不应接受:
0
-5
0,55
0.55
我该如何解决?
请您参考如下方法:
您可以将整个模式包含在可选组中并使用 \d而不是 [1-9]并添加 (?!0+)排除具有前导零的匹配值的负先行限制:
^(?!0+)(?:\d+(?:[.,]\d{0,2})?)?$
^^^^^^^^^ ^^
参见 regex demo
如果不想匹配53. -like 值,您需要替换 {0,2}与 {1,2} .
图案细节:
-
^- 字符串开始 -
(?!0+)- 开头没有零 -
(?:\d+(?:[.,]\d{0,2})?)?- 可选的(一或零)序列:-
\d+- 一位或多位数字 -
(?:[.,]\d{0,2})?- 可选的(一或零)序列:-
[.,]-.或, -
\d{0,2}- 两位、一位或零位
-
-
-
$- 字符串结束。
