如何用正则表达式验证密码?现有正则部分场景验证失败,需符合指定规则
修正密码验证正则表达式的方案
咱们先揪出当前正则的问题:你的测试用例test.Test123验证失败,核心原因是你的正则没把.(点号)放进允许的特殊字符列表里,另外还有两个小疏漏:
- 特殊字符集合里重复写了
$([$@$!%*#?&]里的两个$) &是HTML转义后的&,正则里直接写&就可以了
你的需求再明确下
允许输入字母、数字,必须至少包含一个特殊字符,长度限制在12-20字符之间。
两种修正方案
根据你的需求,我提供两种可选的正则版本:
方案一:明确指定允许的特殊字符
如果你只想开放特定的特殊字符(比如.、@、!这些常见的),用这个版本:
/^(?=.*[A-Za-z])(?=.*\d)(?=.*[.$@!%*#?&])[A-Za-z\d.$@!%*#?&]{12,20}$/
方案二:通用匹配所有非字母数字的特殊字符
如果不想限制特殊字符的种类(只要不是字母、数字、空格都算特殊字符),用这个更灵活的版本:
/^(?=.*[A-Za-z])(?=.*\d)(?=.*[^\w\s])[A-Za-z\d^\w\s]{12,20}$/
注:
[^\w\s]表示匹配非单词字符(非字母、数字、下划线)且非空格的字符,涵盖绝大多数常见密码特殊字符。
正则各部分拆解(以方案一为例)
^:匹配字符串的起始位置(?=.*[A-Za-z]):正向预查,确保字符串里至少有一个大小写字母(?=.*\d):正向预查,确保字符串里至少有一个数字(?=.*[.$@!%*#?&]):正向预查,确保字符串里至少有一个指定的特殊字符(这里新增了.)[A-Za-z\d.$@!%*#?&]{12,20}:匹配12到20个字符,允许的字符包括大小写字母、数字,以及指定的特殊字符$:匹配字符串的结束位置
测试验证
test@Test123:包含字母、数字、@,长度符合要求,验证通过test.Test123:包含字母、数字、.,现在可以正常验证通过- 不符合条件的案例(比如
testtest123缺少特殊字符、test.Test12长度不足12)都会被正确拦截
如果需要新增其他允许的特殊字符,直接把它们加到两个方括号的特殊字符集合里就行。
内容的提问来源于stack exchange,提问作者Narendra Manam
相关产品推荐
相关产品推荐

