如果纯文本中有空格,则密码正则表达式不匹配

password Regex not matching if spaces around in plain text

构建正则表达式以匹配以纯文本形式存储的密码。
8-15 个字符,必须至少包含:

我遇到的问题是,当密码与其他文本或后面的空格内联时,它 return 不匹配。当它单独没有空格时它匹配。

示例:
这是一个 Testing!23 被其他文本包围。
正在测试!23

(?=.{8,15})(?=.*[!@#$%\^&\*])(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*

您想查找所有符合您列出的条件的非空白块。

使用

(?<!\S)(?=\S{8,15}(?!\S))(?=[^!@#$%^&*\s]*[!@#$%^&*])(?=[^\s\d]*\d)(?=[^\sa-z]*[a-z])(?=[^\sA-Z]*[A-Z])\S+

regex demo

详情

  • (?<!\S) - 空格或字符串的开头应该在当前位置之前
  • (?=\S{8,15}(?!\S)) - 在当前位置之后,必须有 8 到 15 个非空白字符,后跟空白或字符串结尾
  • (?=[^!@#$%^&*\s]*[!@#$%^&*]) - 在集合
  • 之外的零个或多个非空白字符之后必须有一个来自 [!@#$%^&*] 集合的字符
  • (?=[^\s\d]*\d) - 0+ 非空白和非数字字符后必须有一个数字
  • (?=[^\sa-z]*[a-z]) - 1 个小写字母必须出现在除空格和小写字母之外的 0+ 个字符之后
  • (?=[^\sA-Z]*[A-Z]) - 1 个大写字母必须出现在除空格和大写字母之外的 0+ 个字符之后
  • \S+ - 所有检查结束,如果成功,则匹配并消耗 1+ 个非空白字符(最后)。