【问题标题】:How to write .NET regular expression for floating value (5,2)?如何为浮点值(5,2)编写.NET正则表达式?
【发布时间】:2011-02-08 10:01:09
【问题描述】:

您好,我需要为浮点值 (5,2) 写一个正则表达式

据我了解(5,2)的意思

  1. 总长度不能超过 5 位,即999.99
  2. 小数点前为 3,小数点后为 2,即999.99

我写了这个:ValidationExpression="(^\d{0,3}[.]?\d{0,2}$)",但这是接受 999999999 这是错误的,因为在这两种情况下,小数点前都超过 3 位。

请帮忙?

【问题讨论】:

  • 是否允许使用前导零?可以删除0 的整数部分吗? 1. 合法吗?
  • @Kobi: 两个人同时做同一件事:)

标签: .net asp.net regex


【解决方案1】:

对于点前 0-3 位和点后 0-2 位的情况:

[-+]?[0-9]{0,3}\.?[0-9]{1,2}

请注意在点之后至少需要一个数字的细微差别。如果您允许点后有 0 个数字,您将只匹配 .,这不是数字。

浮点数的一般约定是允许以小数分隔符开头并只写小数部分(例如.123 表示0.123),所以除非您有其他要求,否则我建议您这样做尊重。

这将匹配:

.1
0.1
0.01
100.02
-3.01

如果您愿意,可以使用\d 代替[0-9]

注意:如果您需要多语言支持,不同的语言环境有不同的小数分隔符(例如,挪威语有 ,)。

浮点数的通用匹配器(来自regular-expressions.info):

[-+]?[0-9]*\.?[0-9]+

验证(“这个字符串是浮点数吗”)需要锚定:

^[-+]?[0-9]*\.?[0-9]+$

最后,这是一个允许指数的表达式(例如 -0.1e-9):

[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)? 

【讨论】:

    【解决方案2】:

    我建议

    ValidationExpression = @"^\d{1,3}(?:\.\d{1,2})?$)"
    

    这需要至少一位(整数)数字,如果有小数部分,则必须是一位或两位长。所以这将匹配

    1
    1.0
    0.12
    999.99
    

    但失败

    .1
    1.
    000001.0
    9999
    

    【讨论】:

      【解决方案3】:

      去掉问号,点变成可选的。

      如果您想要匹配“123.45”、“123.4”和“123”但不匹配“123.”的正则表达式,请使用:

      (^\d{0,3}([.]\d{0,2})?$)
      

      其中可选部分是数字的整个小数部分

      【讨论】:

        【解决方案4】:

        \d{0,3} 表示“0 到 3 位数字之间”

        你应该使用

        (^\d{3}\.\d{2]$)
        

        如果您不想要前导零,请改用这个:

        (^[1-9]\d{2}\.\d{2]$)
        

        【讨论】:

          【解决方案5】:
          "^\d{1,12}(?:[.,]\d{1,2})?$"
          

          表示分隔符前1-12位,然后是分隔符(点或逗号),然后是分隔符后0-2位,即:

          9
          99
          999,1
          9999,22
          (and the same with dot)
          

          【讨论】:

            猜你喜欢
            • 2020-11-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-14
            • 1970-01-01
            • 2012-09-20
            相关资源
            最近更新 更多