创建符合以下规则的密码的正则表达式有以下条件:
>密码必须是8个字符长(我可以做:-))。
密码必须包含以下4个规则中至少3个的字符:
>大写
>小写
>数字
>非字母数字
我可以使用以下表达式使表达式匹配所有这些规则:
/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.[\W]).{8,}$/
但是我正在努力解决如何做到这一点,只需要解决4个规则中的任何3个。
任何人可以帮助我这个?
不要使用一个正则表达式来检查它。
if (password.length < 8) alert("bad password"); var hasUpperCase = /[A-Z]/.test(password); var hasLowerCase = /[a-z]/.test(password); var hasNumbers = /\d/.test(password); var hasNonalphas = /\W/.test(password); if (hasUpperCase + hasLowerCase + hasNumbers + hasNonalphas < 3) alert("bad password");
如果您必须使用单个正则表达式:
^(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*[\d\W])|(?=.*\W)(?=.*\d))|(?=.*\W)(?=.*[A-Z])(?=.*\d)).{8,}$
这个正则表达式没有针对效率进行优化。由A·B·C A·B·D A·C·D B·C·D构成,并进行一些分解。分解:
^ (?: (?=.*[a-z]) # 1. there is a lower-case letter ahead,(?: # and (?=.*[A-Z]) # 1.a.i) there is also an upper-case letter,and (?=.*[\d\W]) # 1.a.ii) a number (\d) or symbol (\W),| # or (?=.*\W) # 1.b.i) there is a symbol,and (?=.*\d) # 1.b.ii) a number ahead ) | # OR (?=.*\W) # 2.a) there is a symbol,and (?=.*[A-Z]) # 2.b) an upper-case letter,and (?=.*\d) # 2.c) a number ahead. ) .{8,} # the password must be at least 8 characters long. $