【发布时间】:2016-05-17 12:27:05
【问题描述】:
我创建了这个正则表达式:
^$|^[1-9]+([\.,]\d{0,2})?$
它应该接受:
1
11,00
100,88 (error)
100 (error)
11.00
100.88
不应该接受:
0
-5
0,55
0.55
我该如何解决?
【问题讨论】:
标签: c# regex validation
我创建了这个正则表达式:
^$|^[1-9]+([\.,]\d{0,2})?$
它应该接受:
1
11,00
100,88 (error)
100 (error)
11.00
100.88
不应该接受:
0
-5
0,55
0.55
我该如何解决?
【问题讨论】:
标签: c# regex validation
您可以使用可选组将整个模式括起来并使用\d 代替[1-9] 并添加(?!0+) 负前瞻限制以排除带有前导零的匹配值:
^(?!0+)(?:\d+(?:[.,]\d{0,2})?)?$
^^^^^^^^^ ^^
如果您不想匹配类似53. 的值,则需要将{0,2} 替换为{1,2}。
模式详情:
^ - 字符串开头(?!0+) - 开头没有零(?:\d+(?:[.,]\d{0,2})?)? - 可选(一或零)序列:
\d+ - 1 位或多位数字(?:[.,]\d{0,2})? - 可选(一或零)序列:
[.,] - . 或 ,
\d{0,2} - 两位、一位或零位$ - 字符串结束。【讨论】:
只要第一个字符是1 和9 之间的数字,后续字符可以是任何数字。但是,您的表达不包括随后的0's;只要第一个字符在1 和9 之间,您就需要允许有任意数量的数字:
^$|^[1-9]\d*([\.,]\d{0,2})?$
^字符串的开头[1-9] 除"0" 之外的任何数字
\d* 0 到无限次之间的任意数字([\.,]\d{0,2})?
"." 或 "," 后跟 0 到 2 位数字$ 字符串结束请参阅this 示例以获得进一步的解释和单元测试。
【讨论】:
根据我对您问题的阅读,您希望字符串“(错误)”成为有效的后缀。那正确吗?如果是这样:
^$|^[1-9]+[0-9]*([\.,]\d{0,2})?( \(error\))?$
【讨论】: