需要正则表达式 - 禁止全部为零

时间:2012-03-07 21:46:39

标签: regex

我想验证字符串以满足以下条件:

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

我有以下正则表达式,除了全零部分之外,它将获取所有内容。有没有办法不允许全部为零?

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

这是唯一的方法来检查正则表达式(并允许“000000”),但然后具体检查它不是“000000”?

感谢。

7 个答案:

答案 0 :(得分:19)

只是有一个像这样的负面预测来禁止所有0:

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

答案 1 :(得分:1)

我会做两次通行证。一个是你的第一个正则表达式,一个是一个新的正则表达式寻找全零。

答案 2 :(得分:1)

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

if ( NOT ALL ZEROS)
    APPLY REGEX

答案 3 :(得分:1)

您可以使用public boolean matches(CharSequence rawPassword, String encodedPassword) { if (encodedPassword == null || encodedPassword.length() == 0) { logger.warn("Empty encoded password"); return false; } if (!BCRYPT_PATTERN.matcher(encodedPassword).matches()) { logger.warn("Encoded password does not look like BCrypt"); return false; } return BCrypt.checkpw(rawPassword.toString(), encodedPassword); } 否定前瞻来避免匹配仅包含1个或多个零的字符串:

(?!0+$)

请参阅regex demo。这种方法允许您在/^(?!0+$)[A-Z0-9][0-9]{5}$/ ^^^^^^^ 之后复制/粘贴前瞻,而不用担心消费部分匹配多少个字符。

<强>详情

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

答案 4 :(得分:0)

我认为这样做会。它检查不是000000和你的原始正则表达式。

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

如果您正在使用特定ID。所以你必须使用

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