用于密码审查的负正则表达式

negative regex for password review

我已经在 Whosebug 上尝试了几个关于这个主题的选项,但是 none 有效。

我有一个密码数据库,我需要检查其合规性。

我想出了如何构建一个表达式来匹配符合所需复杂性的密码:

8-32个字符 字母 数字 特殊字符

^(?=.*[a-z])(?=.*[A-Z])(?=.*[[:digit:]])(?=.*[[:punct:]]).{8,32}

现在,我需要做的就是取上面表达式的负数来找到不符合要求复杂度的密码。

我试图将表达式更改为:

(?!^(?=.{8,32}$)(?=.*[[:alpha:]])(?=.*[[:digit:]])(?=.*[[:punct:]])).*

但这不起作用。

感谢您的帮助

你可以使用负前瞻来反转你的断言,像这样交替:

^(?:(?!.*[a-z])|(?!.*[A-Z])|(?!.*[[:digit:]])|(?!.*[[:punct:]])|(?!.{8,32}$)).*

RegEx Demo

正则表达式详细信息:

  • ^: 开始
  • (?:: 启动非捕获组
    • (?!.*[a-z]): 前面没有小写字母
    • |: 或
    • (?!.*[A-Z]): 前面没有大写字母
    • |: 或
    • (?!.*[[:digit:]]): 我们前面没有数字
    • |: 或
    • (?!.*[[:punct:]]): 前面没有标点符号
    • |: 或
    • (?!.{8,32}$): 我们前面没有 8 到 32 个字符
  • ):
  • .*

此正则表达式将突出显示短于 8 个字符、没有特殊字符、upper/lower 大小写字母和数字的错误密码:

/^(?:(?!.*[a-z])|(?!.*[A-Z])|(?!.*[[:digit:]])|(?!.*[[:punct:]])|(?!.{8,32}$)|(?!.*[\`\-\=\[\]\;\'\#\,\.\/\\¬\!\"\£$\%\^\&\*\(\)\_\+\{\}\:\@\~\<\>\?\|])).*