我创建了这个正则表达式:
^$|^[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}
- 两位、一位或零位
-
-
-
$
- 字符串结束。
关于c# - 为数字符号编写正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37276192/