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

时间:2018-06-19 12:15:36

标签: regex regex-negation regex-lookarounds regex-greedy

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

  • 1个大写字母[A-Z]
  • 1个小写字母[a-z]
  • 1个数字\d
  • 1个特殊字符[!@#\$%\^&\*]

我遇到的问题是,当密码与其他文本或空格一起插入时,它不返回匹配项。当它自己没有空格时,它就会匹配。

示例:
这是一个Testing!23,其他文字都包围了。
测试!23

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

1 个答案:

答案 0 :(得分:0)

您要查找与您概述的条件匹配的所有非空白块。

使用

(?<!\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])-除空格和小写字母外,其他0个字符后必须出现1个小写字母
  • (?=[^\sA-Z]*[A-Z])-除空格和大写字母外,其他0个字符后必须出现1个大写字母
  • \S+-所有检查都结束了,如果检查成功,则匹配并消耗1个以上的非空白字符(最终)。