【问题标题】:Write a regex for number notations为数字符号编写正则表达式
【发布时间】: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】:

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

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

    regex demo

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

    模式详情

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

    【讨论】:

      【解决方案2】:

      只要第一个字符是19 之间的数字,后续字符可以是任何数字。但是,您的表达不包括随后的0's;只要第一个字符在19 之间,您就需要允许有任意数量的数字:

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

      模式说明:

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

      请参阅this 示例以获得进一步的解释和单元测试。

      【讨论】:

        【解决方案3】:

        根据我对您问题的阅读,您希望字符串“(错误)”成为有效的后缀。那正确吗?如果是这样:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-13
          • 2014-07-31
          • 1970-01-01
          • 2016-12-12
          • 2016-09-12
          • 1970-01-01
          • 2023-01-20
          • 1970-01-01
          相关资源
          最近更新 更多