求符合放宽后密码规则的合并式正则表达式解决方案
密码安全校验正则表达式(降安全等级版)
最终合并后的正则表达式
^(?=(?:(?=.*\d)(?=.*[a-z])(?=.*[A-Z])|(?=.*\d)(?=.*[a-z])(?=.*[^a-zA-Z0-9])|(?=.*\d)(?=.*[A-Z])(?=.*[^a-zA-Z0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])))[\S]{9,20}$
规则拆解
- 边界控制:
^和$确保校验覆盖整个密码字符串,避免部分匹配 - 多类字符断言:外层的
(?=...)是正向预查,内部包含4个分支,分别对应所有符合「至少3类字符」的场景:- 分支1:
(?=.*\d)(?=.*[a-z])(?=.*[A-Z])→ 包含数字、小写字母、大写字母(无特殊字符) - 分支2:
(?=.*\d)(?=.*[a-z])(?=.*[^a-zA-Z0-9])→ 包含数字、小写字母、特殊字符(无大写字母) - 分支3:
(?=.*\d)(?=.*[A-Z])(?=.*[^a-zA-Z0-9])→ 包含数字、大写字母、特殊字符(无小写字母) - 分支4:
(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])→ 包含小写字母、大写字母、特殊字符(无数字)
- 分支1:
- 长度与空格控制:
[\S]{9,20}直接匹配9-20个非空格字符,同时满足长度要求和无空格限制
补充说明
这个正则延续了你最初的断言式写法,把所有符合要求的场景通过预查分支整合,一次校验即可覆盖所有规则,无需拆分多个表达式。
内容的提问来源于stack exchange,提问作者mammoth
相关产品推荐
相关产品推荐

