要求
密码长度 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`·~!@#$%^&*()_+}{|:;'",<.>/?\=\[\]\-\\]*$
只支持英文状态下的特殊字符,因为发现中文的
—
和英文的-
是两个字符。