【问题标题】:Need a regular expression - disallow all zeros需要一个正则表达式 - 不允许全零
【发布时间】:2012-03-07 21:46:39
【问题描述】:

我想验证一个字符串是否满足以下条件:

  • 长度必须为 6 个字符
  • 只有第一个字符可以是字母数字,其余的必须是数字
  • 如果第一个数字是字母,则必须大写
  • 不能全为零

我有以下正则表达式,它可以获取除全零部分之外的所有内容。有没有办法禁止全零?

^[A-Z0-9][0-9]{5}$

这是检查正则表达式(并允许“000000”)但随后专门检查它不是“000000”的唯一方法吗?

谢谢。

【问题讨论】:

标签: regex


【解决方案1】:

您可以使用 (?!0+$) 否定前瞻来避免匹配仅包含 1 个或多个零的字符串:

/^(?!0+$)[A-Z0-9][0-9]{5}$/
  ^^^^^^^

请参阅regex demo。这种方法让您只需在^ 之后复制/粘贴前瞻,而不必担心消耗部分匹配多少个字符。

详情

  • ^ - 字符串开头
  • (?!0+$) - 如果字符串末尾有 1 个或多个 0 字符($),则匹配失败的负前瞻($
  • [A-Z0-9] - 大写 ASCII 字母或数字
  • [0-9]{5} - 五位数
  • $ - 字符串结束。

【讨论】:

    【解决方案2】:

    只需像这样进行否定前瞻即可禁止全 0:

    /^(?!0{6})[A-Z0-9][0-9]{5}$/
    

    【讨论】:

      【解决方案3】:

      我会做两次传球。一个是你的第一个正则表达式,另一个是寻找全零的新正则表达式。

      【讨论】:

        【解决方案4】:

        如果您首先检查全零的情况,然后在确定不是全零后应用您的正则表达式会怎样?

        if ( NOT ALL ZEROS)
            APPLY REGEX
        

        【讨论】:

          【解决方案5】:

          我认为这可以做到。它检查不是 000000 和您的原始正则表达式。

          (?!0{6})^[A-Z0-9][0-9]{5}$
          

          【讨论】:

            【解决方案6】:

            (?!000000)[A-Z0-9][0-9]{5} 如果前瞻没问题。

            【讨论】:

              【解决方案7】:

              这是这个正则表达式的正确答案

              [O]{1}((?!0+$)[0-9]{1,5})

              如果您使用特定的 ID。所以你必须使用它

              例如。 1. O0——拒绝 2. O00——拒绝 3. O00000 -- 拒绝 4. O1——成功 5. O01——成功

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-19
                相关资源
                最近更新 更多