请教密码强度正则表达式
var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
请问这2个var中表达的是什么样的规则? 展开
密码强度指一个密码被非认证的用户或计算机破译的难度。 密码强度通常用“弱”或“强”来形 容。“弱”和“强”是相对的,不同的密码系统对于密码强度有不同的要求。密码的破译与系统允许客户尝试不同密码的次数、是否熟悉密码主人等因素相关。然而,即使再强的密码也有可能被偷取、破译或泄漏,在用户设置密码时,尽可能的将密码设置的越复杂、位数越长、经常更换此类型的密码,从而才能让密码强度尽可能达到最高。
条件1: 密码只能是数字或大小写字母或下划线的组合
条件2: 如果密码包含数字和字母的组合即为强.
例如 : 123abc 为强密码
123abc_也是强密码
123456 为弱密码
123456_为弱密码
abcdef 为弱密码
abcdef_ 为弱密码
首先,画一个DFA:
其中,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!@#$%*()_+^&]*$
分解:
<span style="font-size: 16px;">(?=^.{12,25}$) -- 密码长度12-25,自己改变数字可以调节
(?=(?:.*?[!@#$%*()_+^&}{:;?.]){1}) -- 至少一个特殊字母,FYI</span>
(?=(?:.*?\d){2}) -- 至少2个数字,FYI
(?=.*[a-z]) -- a-z的小写字母
(?=(?:.*?[A-Z]){2}) -- 至少2个大写字母,FYI
表示至少8个字符,而且必须同时有大写字母,小写字母,数字,除了字母数字下划线以外的字符。四种字符必须都有,缺一不可。
比如“aAbb2?eee"就符合要求,而“aAbb2_eee"就不符合要求
var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
表示至少7个字符,必须同时含有大写字母和小写字母;或者同时有大写字母和小写字母;或者同时有小写字母和数字。以上三种情况满足一种即符合要求
两种:
第一,要求密码至少包含 大写字母,小字字母,数字,特殊符号中的两种:
reg=/^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)])+$).{6,}$/;
第二:要求密码必须包含字母,数字和特殊符号:
reg=/^(?=.*[a-zA-Z])(?=.*[1-9])(?=.*[\W]).{6,}$/;
这里有详细的解释和在线演示:jquery里用正则来验证密码,必须包含大小写字母,数字及特殊符号,或最少包含两种