【问题标题】:regular expression for 5 digit number excluding '00000'5位数字的正则表达式,不包括'00000'
【发布时间】:2012-12-11 10:35:20
【问题描述】:

我需要有一个正则表达式,它接受至少 1 位数字和最大 5 位数字,如果用户以以下方式输入零,例如“00”、“000”、“0000”、“00000”,那么表达式应该拒绝这样的投入。 目前,我正在使用 ^[0-9]{1,5}$.

【问题讨论】:

    标签: asp.net regex validation


    【解决方案1】:
    ^(?=.*[1-9].*)[0-9]{1,5}$
    

    使用前瞻断言确保至少有一个非零数字。如果有,则表达式的其余部分仅在 1 到 5 位数字之间匹配。这两个条件都必须满足,否则表达式将不匹配。

    同意,不过,如果您尝试匹配一个数字,而不是一串数字(如邮政编码),最好用数字比较而不是使用正则表达式。

    【讨论】:

      【解决方案2】:

      如果您要确保用户的输入格式为带有前导零的 5 位数字,则以下正则表达式将起作用:

      ^[0-9]{5}(?<!00000)$
      

      这使用负向后查找来确保输入的字符串不是 5 个零。

      【讨论】:

        【解决方案3】:

        不好但工作:

        从 1 到 99999:[1-9][0-9]{0,4}

        从 01 到 09999:0[1-9][0-9]{0,3}

        从 001 到 00999:00[1-9][0-9]{0,2}

        从 0001 到 00099:000[1-9][0-9]{0,1}

        从 00001 到 00009:0000[1-9]

        然后将所有这些放在一起:

        ^(0[1-9][0-9]{0,3}|00[1-9][0-9]{0,2}|000[1-9][0-9]{0,1}|0000[1-9]|[1-9][0-9]{0,4})$

        编辑:更新。

        【讨论】:

        • 终于成功了。 :) 只是前导零的情况需要分开。
        【解决方案4】:

        它真的需要是一个正则表达式吗?为什么不检查0 &lt; value &amp;&amp; value &lt;=99999 是否存在?

        【讨论】:

          【解决方案5】:

          好的,我明白了,这里是解决方案: ^[1-9][0-9]{0,4}$

          取 1 到 99999 之间的所有数字

          你为什么不使用 RangeValidator 它更简单。

          <asp:RangeValidator ID="RangeValidator1" runat="server" ErrorMessage="Value must be greater than zero." ControlToValidate="tbQty" MinimumValue="1" MaximumValue="99999" Type="Integer"></asp:RangeValidator>
          

          【讨论】:

          • 嗯。不。我相信09898 也很好。并且不要发布多个答案。编辑现有的。并删除其中一个无效答案。
          • 001 怎么样 - 我认为这也应该是有效的。
          • 感谢 GeorgesD,它可以工作,但对于像 012 这样的输入。它不起作用。你能解决这个问题吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-29
          • 1970-01-01
          • 2023-03-14
          相关资源
          最近更新 更多