🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
 密码强度指一个密码被非认证的用户或计算机破译的难度。 密码强度通常用“弱”或“强”来形 容。“弱”和“强”是相对的,不同的密码系统对于密码强度有不同的要求。密码的破译与系统允许客户尝试不同密码的次数、是否熟悉密码主人等因素相关。然而,即使再强的密码也有可能被偷取、破译或泄漏,在用户设置密码时,尽可能的将密码设置的越复杂、位数越长、经常更换此类型的密码,从而才能让密码强度尽可能达到最高。   条件1: 密码只能是数字或大小写字母或下划线的组合   条件2: 如果密码包含数字和字母的组合即为强.   例如 : 123abc 为强密码    123abc_也是强密码    123456 为弱密码    123456_为弱密码    abcdef 为弱密码    abcdef_ 为弱密码   首先,画一个DFA: ![mark](http://qiniu.newthink.cc/blog/20180205-114102179.jpg) 其中,S是开始状态,A代表包含数字但不包含字母的状态,B代表包含字母但不包含数字的状态,C代表既包含字母又包含数字的状态,O代表包含非法字符的陷阱状态。如果状态机停在S、A、B状态,则为弱密码。如果状态机停在C状态,则为强密码。如果状态机停在O状态,则为非法密码。然后,把它转化成正则就可以啦。 下面这个正则要求密码长度最少12位,包含至少1个特殊字符,2个数字,2个大写字母和一些小写字母。 ``` (?=^.{12,25}$)(?=(?:.*?\d){2})(?=.*[a-z])(?=(?:.*?[A-Z]){2})(?=(?:.*?[!@#$%*()_+^&}{:;?.]){1})(?!.*\s)[0-9a-zA-Z!@#$%*()_+^&]*$ ``` ## 分解: ``` (?=^.{12,25}$) -- 密码长度12-25,自己改变数字可以调节 (?=(?:.*?[!@#$%*()_+^&}{:;?.]){1}) -- 至少一个特殊字母,FYI (?=(?:.*?\d){2}) -- 至少2个数字,FYI (?=.*[a-z]) -- a-z的小写字母 (?=(?:.*?[A-Z]){2}) -- 至少2个大写字母,FYI ```