Write a regex for number notations

时间:2016-05-17 12:27:05

标签: c# regex validation

I created this regular expression:

^$|^[1-9]+([\.,]\d{0,2})?$

It should accept:

1
11,00
100,88 (error)
100 (error)
11.00
100.88

Shouldn't accept:

0
-5
0,55
0.55

How can I fix it?

3 个答案:

答案 0 :(得分:2)

您可以使用可选组将整个模式括起来,并使用\d代替[1-9]并添加(?!0+)否定前瞻限制,以使用前导零排除匹配值:

^(?!0+)(?:\d+(?:[.,]\d{0,2})?)?$
 ^^^^^^^^^                   ^^

请参阅regex demo

如果您不想与53.类似的值匹配,则需要将{0,2}替换为{1,2}

模式详情

  • ^ - 字符串开头
  • (?!0+) - 开头没有零
  • (?:\d+(?:[.,]\d{0,2})?)? - 可选(一个或零个)序列:
    • \d+ - 一位或多位
    • (?:[.,]\d{0,2})? - 可选(一个或零个)序列:
      • [.,] - .,
      • \d{0,2} - 两位,一位或零位
  • $ - 字符串结束。

答案 1 :(得分:1)

只要第一个字符是19之间的数字,后续字符就可以是任何数字。但是,您的表达式排除了后续0个;你需要允许任意数量的数字,只要第一个字符在19之间:

^$|^[1-9]\d*([\.,]\d{0,2})?$

模式说明:

  • ^字符串的开头
  • [1-9]"0"
  • 之外的任何数字
  • \d* 0到无限次之间的任何数字
  • ([\.,]\d{0,2})?
    • (可选)"."","后跟0到2位
  • $字符串结尾

有关进一步说明和单元测试,请参阅this示例。

答案 2 :(得分:0)

从我对你的问题的阅读中,你希望字符串“(error)”成为有效的后缀。是对的吗?如果是这样的话:

^$|^[1-9]+[0-9]*([\.,]\d{0,2})?( \(error\))?$