【问题标题】:Do not allow decimal points after 10 digits using regex不允许使用正则表达式的 10 位数字后的小数点
【发布时间】:2018-09-08 00:35:50
【问题描述】:

我想在使用正则表达式的文本框中只允许数字。

  • 最多允许 10 位数字。
  • 小数点后最多 2 位。
  • 不允许使用 10 位数字后的小数点。

有效表达式:

999999999.22
1234567890
123447899.1

无效的表达式:

99999999999
9999999999.12
9999999999.1
99999999999.12
99999999999.1

我已经尝试过下面的正则表达式,它可以满足我的所有期望: 它允许 10 位数字后的小数点,这是我不想要的。 小数点只能在最多 9 位数字后有效。

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

【问题讨论】:

    标签: c# asp.net regex


    【解决方案1】:

    您可以将正则表达式分成三部分:1 到 10 位、1 到 9 位和 1 位小数以及 1 到 8 位和 2 位小数:

    ^\d{1,10}$|^\d{1,8}\.\d{2}$|^\d{1,9}\.\d$
    

    (Proof)

    【讨论】:

    • 感谢您的努力,但以上不起作用
    • 想解释一下为什么不?
    • @PatrickHofman 您需要将 ^ 和 $ 放在每个 OR 分支中:^\d{1,10}$|^\d{1,9}\.\d$|^\d{1,8}\.\d{2}$。截至目前,您的正则表达式匹配任意内容,例如“dd22”(即使部分匹配)。
    • @KalpeshKoli 不要忘记转义反斜杠或使用逐字字符串,即@"..."
    • @Patrick 它不起作用,因为我没有在每个 OR 分支中都放 ^ 和 $,现在它运行良好,非常感谢您
    【解决方案2】:

    您可以使用 alternation 匹配 1 - 9 位数字后跟 1 或 2 位小数或 1 - 10 位数字:

    ^(?:\d{1,9}\.\d{1,2}|\d{1,10})$

    【讨论】:

      猜你喜欢
      • 2012-12-21
      • 2022-07-22
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      相关资源
      最近更新 更多