构建正则表达式以匹配以纯文本格式存储的密码。
8-15个字符,必须至少包含:
[A-Z]
[a-z]
\d
[!@#\$%\^&\*]
我遇到的问题是,当密码与其他文本或空格一起插入时,它不返回匹配项。当它自己没有空格时,它就会匹配。
示例:
这是一个Testing!23,其他文字都包围了。
测试!23
(?=.{8,15})(?=.*[!@#\$%\^&\*])(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*
答案 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个以上的非空白字符(最终)。