【问题标题】:Need of Regular Expression patttern for certain condition特定条件下需要正则表达式模式
【发布时间】:2014-03-10 15:19:14
【问题描述】:

如何创建具有以下条件的正则表达式?

  1. 最小密码长度:8
  2. 最少字符数:1
  3. 最小位数:1
  4. 特殊字符的最小数量:1
  5. 最大重复字符数:2
  6. 最大字母顺序:2
  7. 最大数字顺序:2

试过了:

^(?=(.*\d){1})(?=.*[!@#$%_-]) (?=.*[0-9a-zA-Z]){1,2}.{8,}$

【问题讨论】:

  • 你能举个例子吗??
  • 对于“没有足够的努力或解决方案尝试”,不再有接近投票选项?遇到这样的问题该怎么办?回答或要求更多的 OP,或对某事进行近距离投票? (我想这属于元数据。)
  • @Qtax 我同意你的看法,伙计,我们不是来为其他任何人编写代码的,我们可以解决问题而不是为他们编写代码
  • 就个人而言,我不会尝试在一个正则表达式中完成所有这些工作。你为什么不一一测试每一件事呢?您使用什么语言?
  • @emh 我试过了 -> ^(?=(.*\d){1})(?=.*[!@#$%_-]) (?=.*[ 0-9a-zA-Z]){1,2}.{8,}$ ,我需要最大重复字符,字母 * 数字顺序

标签: php jquery regex


【解决方案1】:

可以做到这一点(我假设您的字母/数字是指 ASCII 字母/数字),但您的最后两个要求并不简单:

if (preg_match(
    '/^              # Start of string
    (?=.*[a-z])      # Assert at least one letter
    (?=.*[0-9])      # and one digit
    (?=.*[^a-z0-9])  # and one "other" character
    (?!.*(.)\1{2})   # and no three identical characters in a row
    (?!.*(?:abc|bcd|cde|def|efg|fgh|ghi|
            hij|ijk|jkl|klm|lmn|mno|nop|
            opq|pqr|qrs|rst|stu|tuv|uvw|
            vwx|wxy|xyz)) # and no three-letter sequence
    (?!.*(?:123|234|345|456|567|678|789|890))  # and no three-digit sequence
    .{8,}            # Match at least 8 characters
    $                # End of string/ix',       
    $subject)) {
    # Successful match
} else {
    # Match attempt failed
}

如果您还想按降序排除字母/数字(或像 zab901 这样的环绕),您需要将它们添加到交替中。

【讨论】:

  • 我希望我能在写几乎完全相同的答案时刷新这个!你打败了我!我的答案中唯一显着的区别是明确指定特殊字符 [!@#$%_-],如 OP 的示例中所示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
相关资源
最近更新 更多