用于密码验证的正则表达式 [重复]

Posted

技术标签:

【中文标题】用于密码验证的正则表达式 [重复]【英文标题】:Regex for Password Validation [duplicate] 【发布时间】:2016-10-09 10:37:55 【问题描述】:

我正在寻找一个正则表达式来验证以下密码:

密码必须最少 7 个字符,最多 50 个字符

密码必须包含以下四个类别中的至少三个:

    英文大写字母字符 (A–Z) 英文小写字母字符 (a–z) 以 10 位为基数 (0–9) 非字母数字字符(例如,!$#,%)

我的尝试如下:

^.*(?=.7,50)(?=.*\d)(?=.*[A-Z]).*$

这不检查特殊字符,我不知道如何使密码必须包含以下四个类别中的至少三个。

谁能帮忙推荐一个正则表达式来验证这个密码策略?

【问题讨论】:

这是否有某种原因需要成为正则表达式?您的每个约束都可以使用内置函数来实现,或者最多可以使用几行琐碎的代码,这将比正则表达式解决方案更易于理解和维护。 【参考方案1】:

说明

^(?:(?=.*?[A-Z])(?:(?=.*?[0-9])(?=.*?[-!@#$%^&*()_[\],.<>+=])|(?=.*?[a-z])(?:(?=.*?[0-9])|(?=.*?[-!@#$%^&*()_[\],.<>+=])))|(?=.*?[a-z])(?=.*?[0-9])(?=.*?[-!@#$%^&*()_[\],.<>+=]))[A-Za-z0-9!@#$%^&*()_[\],.<>+=-]7,50$

为了更好地查看图像,您可以右键单击图像并选择在新窗口中查看。

这个正则表达式将执行以下操作

要求字符串长度为 7 - 50 个字符 允许字符串包含A-Za-z0-9!@#$%^&*()_[\],.<>+=-字符 需要至少一个字符来自以下任意三种情况
    英文大写字母A–Z 英文小写字母字符a–z 以 10 位为基数 0–9 非字母数字字符!@#$%^&*()_[],.<>+=-

示例

现场演示

https://regex101.com/r/jR9cC7/1

示例文本

         1         2         3         4         5        6
12345678901234567890123456789012345678901234567890124567890
aaaaAAAA1111
aaaaBBBBBBB
AAAAaaaa__
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!A
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!A
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!AA

允许的字符串

aaaaAAAA1111
AAAAaaaa__
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!A

说明

NODE                     EXPLANATION
----------------------------------------------------------------------
  ^                        the beginning of a "line"
----------------------------------------------------------------------
  (?:                      group, but do not capture:
----------------------------------------------------------------------
    (?=                      look ahead to see if there is:
----------------------------------------------------------------------
      .*?                      any character except \n (0 or more
                               times (matching the least amount
                               possible))
----------------------------------------------------------------------
      [A-Z]                    any character of: 'A' to 'Z'
----------------------------------------------------------------------
    )                        end of look-ahead
----------------------------------------------------------------------
    (?:                      group, but do not capture:
----------------------------------------------------------------------
      (?=                      look ahead to see if there is:
----------------------------------------------------------------------
        .*?                      any character except \n (0 or more
                                 times (matching the least amount
                                 possible))
----------------------------------------------------------------------
        [0-9]                    any character of: '0' to '9'
----------------------------------------------------------------------
      )                        end of look-ahead
----------------------------------------------------------------------
      (?=                      look ahead to see if there is:
----------------------------------------------------------------------
        .*?                      any character except \n (0 or more
                                 times (matching the least amount
                                 possible))
----------------------------------------------------------------------
        [-                       any character of: '-', '!', '@',
        !@#$%^&*()_[\]           '#', '$', '%', '^', '&', '*', '(',
        ,.<>+=]                ')', '_', '[', '\]', '', '', ',',
                                 '.', '<', '>', '+', '='
----------------------------------------------------------------------
      )                        end of look-ahead
----------------------------------------------------------------------
     |                        OR
----------------------------------------------------------------------
      (?=                      look ahead to see if there is:
----------------------------------------------------------------------
        .*?                      any character except \n (0 or more
                                 times (matching the least amount
                                 possible))
----------------------------------------------------------------------
        [a-z]                    any character of: 'a' to 'z'
----------------------------------------------------------------------
      )                        end of look-ahead
----------------------------------------------------------------------
      (?:                      group, but do not capture:
----------------------------------------------------------------------
        (?=                      look ahead to see if there is:
----------------------------------------------------------------------
          .*?                      any character except \n (0 or more
                                   times (matching the least amount
                                   possible))
----------------------------------------------------------------------
          [0-9]                    any character of: '0' to '9'
----------------------------------------------------------------------
        )                        end of look-ahead
----------------------------------------------------------------------
       |                        OR
----------------------------------------------------------------------
        (?=                      look ahead to see if there is:
----------------------------------------------------------------------
          .*?                      any character except \n (0 or more
                                   times (matching the least amount
                                   possible))
----------------------------------------------------------------------
          [-                       any character of: '-', '!', '@',
          !@#$%^&*()_[             '#', '$', '%', '^', '&', '*', '(',
          \],.<>+=]              ')', '_', '[', '\]', '', '',
                                   ',', '.', '<', '>', '+', '='
----------------------------------------------------------------------
        )                        end of look-ahead
----------------------------------------------------------------------
      )                        end of grouping
----------------------------------------------------------------------
    )                        end of grouping
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    (?=                      look ahead to see if there is:
----------------------------------------------------------------------
      .*?                      any character except \n (0 or more
                               times (matching the least amount
                               possible))
----------------------------------------------------------------------
      [a-z]                    any character of: 'a' to 'z'
----------------------------------------------------------------------
    )                        end of look-ahead
----------------------------------------------------------------------
    (?=                      look ahead to see if there is:
----------------------------------------------------------------------
      .*?                      any character except \n (0 or more
                               times (matching the least amount
                               possible))
----------------------------------------------------------------------
      [0-9]                    any character of: '0' to '9'
----------------------------------------------------------------------
    )                        end of look-ahead
----------------------------------------------------------------------
    (?=                      look ahead to see if there is:
----------------------------------------------------------------------
      .*?                      any character except \n (0 or more
                               times (matching the least amount
                               possible))
----------------------------------------------------------------------
      [-                       any character of: '-', '!', '@', '#',
      !@#$%^&*()_[\]         '$', '%', '^', '&', '*', '(', ')',
      ,.<>+=]                  '_', '[', '\]', '', '', ',', '.',
                               '<', '>', '+', '='
----------------------------------------------------------------------
    )                        end of look-ahead
----------------------------------------------------------------------
  )                        end of grouping
----------------------------------------------------------------------
  [A-Za-z0-                any character of: 'A' to 'Z', 'a' to 'z',
  9!@#$%^&*()_[\],.<     '0' to '9', '!', '@', '#', '$', '%', '^',
  >+=-]7,50              '&', '*', '(', ')', '_', '[', '\]', '',
                           '', ',', '.', '<', '>', '+', '=', '-'
                           (between 7 and 50 times (matching the most
                           amount possible))
----------------------------------------------------------------------
  $                        before an optional \n, and the end of a
                           "line"
----------------------------------------------------------------------

【讨论】:

非常感谢。效果很好【参考方案2】:

为了在一个正则表达式中添加多个条件,我们使用管道或括号 /(regex1)|(regex2)|(regex2)/ 或 (regex1)(regex2)

每个正则表达式条件都非常基本,对于您提出的每个条件都有很多示例。

你可以看这里:

Regex for Password Must be contain at least 8 characters, least 1 number and both lower and uppercase letters and special characters

【讨论】:

以上是关于用于密码验证的正则表达式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式验证模式只允许一个字符[重复]

正则表达式密码验证 - Codewars [重复]

用于密码的javascript正则表达式,包含至少8个字符、1个数字、1个大写和1个小写[重复]

密码验证Objective-C的正则表达式[重复]

用于密码验证的正则表达式 Java

用于密码验证的正则表达式