代码之家  ›  专栏  ›  技术社区  ›  Erix

正则表达式匹配两位数字,可选十进制,两位数字

  •  32
  • Erix  · 技术社区  · 15 年前

    我需要一个正则表达式,它将匹配一个或两个数字,后跟一个可选的十进位点,后跟一个或两个数字。

    例如,它应该完全匹配这些字符串:

    3.
    33

    .33
    33.3
    33.33

    9 回复  |  直到 12 年前
        1
  •  72
  •   Lee    15 年前

    编辑:更改以适应其他反馈。

    \d{0,2}(\.\d{1,2})?
    

    [0-9]?[0-9]?(\.[0-9][0-9]?)?
    

        2
  •  8
  •   Jeremy Stein    15 年前
    (?<![\d.])(\d{1,2}|\d{0,2}\.\d{1,2})?(?![\d.])
    

    比赛:

    • 33

    • 333.33
    • 33.333
        3
  •  6
  •   Daniel Vandersluis    15 年前

    要基于Lee的答案,您需要锚定表达式以满足小数点前不超过2个数字的要求。

    string anchors

    ^\d{0,2}(\.\d{1,2})?$
    

    如果每个数字都在一个字符串中,则可以使用 word anchors :

    \b\d{0,2}(\.\d{1,2})?\b
    
        4
  •  3
  •   ahawker    15 年前

    这将匹配1-2位数字,后跟一个可能的小数,后跟另一个1-2位数字,但在您的.33示例中失败

    \d{1,2}\.?\d{1,2}
    

    这将匹配0-2位数字,后跟一个可能的小数,后跟另一个1-2位数字,并匹配您的.33示例

    \d{0,2}\.?\d{1,2}
    

    不确定你到底在找哪一个。

        5
  •  3
  •   Darpan    5 年前

    你可以用

    ^(?=[0-9.]{1,${maxlength}}$)[0-9]+(?:\.[0-9]{0,${decimal_number}})?$ );

    您可以决定最大长度以及要控制该值的小数点

    使用ES6字符串插值来包装变量${maxlength}和${decimal\u number}。

        6
  •  1
  •   pp_    9 年前
    ^(\d{0,2}\\.)?\d{1,2}$
    

    \d{1,2}$ 匹配一个1-2位数字,后面没有任何内容( 3 , 33 (等),, (\d{0,2}\.)? 可选地匹配一个0-2位数,后跟一个句点( 3. , 44. , . 等)。把它们放在一起,你就有了你的正则表达式。

        7
  •  0
  •   cpjolicoeur    15 年前
    ^\d{0,2}\.?\d{1,2}$
    
        8
  •  0
  •   therealsix therealsix    15 年前

    ^([0-9]?[0-9](\.[0-9][0-9]?)?)|([0-9]?[0-9]?(\.[0-9][0-9]?))$
    
        9
  •  0
  •   fancyPants    11 年前

    \d{1,2}\.?(\.\d{1,2})?
    
        10
  •  0
  •   Keren Caelen    11 年前

    下面是两位数字和两个小数点的非常好的正则表达式。

    [RegularExpression(@"\d{0,2}(\.\d{1,2})?", ErrorMessage = "{0} must be a Decimal Number.")]
    
        11
  •  -1
  •   Helder Pereira    4 年前
      \d{1,}(\.\d{1,2})|\d{0,9}
    

    测试 https://regexr.com/

    与带2位小数或仅带1位小数的数字匹配,或与不带小数的数字匹配。