要求

密码长度 6-16 位,包含至少一个特殊字符,一个数字,一个大写字母和一个小写字母。

正则表达式

(?=^.{6,16}$)(?=(?:.*?\d){1})(?=.*[a-z])(?=(?:.*?[A-Z]){1})(?=(?:.*?[`·~!@#$%^&*()_+}{|:;'",<.>/?\=\[\]\-\\]){1})(?!.*\s)[0-9a-zA-Z`·~!@#$%^&*()_+}{|:;'",<.>/?\=\[\]\-\\]*$

解释

规则 解释
(?=^.{6,16}$) 密码长度6-16,自己改变数字可以调节
(?=(?:.?[`·~!@#$%^&()_+}{:;'",<.>/?=\[\]\-\]){1}) 至少一个特殊字符
(?=(?:.*?\d){1}) 至少一个数字
(?=.*[a-z]) a-z的小写字母
(?=(?:.*?[A-Z]){1}) 至少一个大写字母

一些坑

  • 在做特殊字符处理这块,因为涉及到有些字符比如 = [ ] - \ 这四个,需要在前面加 \ 进行转义,才能正常正则识别出来。

  • 特殊字符匹配,后面这段必须也包含前面的匹配代码,即两段 ``·~!@#$%^&*()_+}{|:;'",<.>/?=[]-\` 都相同:

    (?=(?:.*?[`·~!@#$%^&*()_+}{|:;'",<.>/?\=\[\]\-\\]){1})(?!.*\s)[0-9a-zA-Z`·~!@#$%^&*()_+}{|:;'",<.>/?\=\[\]\-\\]*$
  • 只支持英文状态下的特殊字符,因为发现中文的 和英文的 - 是两个字符。

正则表达式测试网站

参考

正则表达式验证密码强度

密码强度正则表达式 – 必须包含大写字母,小写字母和数字,至少8个字符等