使用正则前瞻检查密码强度
目录
使用正则前瞻检查密码强度
密码强度检查
8个字符以上
必须包含数字
必须包含大小写字母
必须包含特殊字符
如何用正则表达式来检查密码是否符合以上的条件,下面我们来一步步的实现
/^\d+[a-z]+$/
这个只能匹配前面是数字,后面是字母的情况,例如:83737aidjdh,如果前面是数字,后面是字母,无法匹配,例如:aaa456
因为正则匹配是要消耗字符的,这时候,我们要使用前瞻运算 (?=规则) , 前瞻运算总是从字符串开始来匹配的,不消耗字符
/^(?=.*\d).*$/;
这个可以匹配包含数字的字符串,如果不包含数字,就不能匹配, (?=.*\d) 是匹配是否有数字, .* 是匹配后,将剩余字符消耗,结束匹配
/^(?=.*\d)(?=.*[a-z]).*$/;
这个可以匹配包含数字和小写字母的字符串,如果不是同时包含数字和小写字母,就不能匹配
/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@_.,]).*$/;
这个可以匹配包含数字、小写字母、大写字母、特殊字符的字符串,如果不是同时包含,就不能匹配,但是问题是没有规定哪些字符不能出现,是因为在 (?=规则) 匹配完成后, .* 消耗字符太宽泛,需要替换成规则中的字符
/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@_.,])[\da-zA-Z@_.,]{8}$/;
这个就可以匹配文章开头提到的密码规则
- {8} 是检查长度必须为8位,如果是6-12位,可以写成{6,12}
- \d 是数字 (?=.*\d) 是匹配数字
- [a-z] 是小写字母(?=.*[a-z])是匹配小写字母
- [A-Z] 是大写字母(?=.*[A-Z])是匹配大写字母
- [@_.,] 是列举的特殊字符,可以自己添加(?=.*[@_.,])是匹配特殊字符
- [\da-zA-Z@_.,] 是在前瞻运算匹配结束后,检查整个字符串中,是否只包含上面规则中的字符
- ^ 表示匹配字符串的开始位置
- $ 表示匹配字符串的结束位置