目录

使用正则前瞻检查密码强度

使用正则前瞻检查密码强度

密码强度检查

  • 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@_.,] 是在前瞻运算匹配结束后,检查整个字符串中,是否只包含上面规则中的字符
  • ^ 表示匹配字符串的开始位置
  • $ 表示匹配字符串的结束位置