我对用户密码有4个要求:
- 至少 1 个 a-z 字符
- 至少 1 个 A-Z 字符
- 至少 1 个 0-9 字符
- 至少 1 个符号
.!@#$%^&*()_
但是,用户只需满足 4 个条件中的 2 个以上即可。
密码VVVV1111
, !234567
, AaAaAaAa
or A1!aA1!a
有效,密码VVVVVVVV
, 12345678
, aaaaaaa
, !!!!!!!
不是。
我怎样才能制作 2 of 4 OR 正则表达式?
我想出了 3 个条件(A-Z、a-z 和 0-9):
^((?=.*?[A-Z])|(?=.*?[0-9]))((?=.*?[a-z])|((?=.*?[A-Z])(?=.*?[0-9]))).{8,30}$
但我认为必须有一个更好的选择,因为这个正则表达式在第四个条件下变得非常大。
始终将大问题分解为小问题。
为四个不同条件中的每一个定义一个单独的正则表达式,然后检查是否满足足够的条件。
例如:
var checks = {
lowercase: /[a-z]/,
uppercase: /[A-Z]/,
number: /[0-9]/,
symbol: /[.!@#$%^&*()_]/
}, passcount = 0, results = {};
for( var k in checks) if( checks.hasOwnProperty(k)) {
if( checks[k].test(password)) {
passcount++;
results[k] = true;
}
else results[k] = false;
}
if( passcount < 2) {
alert("Your password didn't meet enough conditions.\n" +
"[Provide useful info here - 'results' object lists " +
"whether each test passed or failed, so use that for " +
"a user-friendly experience!]");
return false;
}
return true;
最后,强制性的 xkcd 漫画:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)