我有4个用户密码要求:
.!@#$%^&*()_
但是,用户必须只满足4个条件中的2个。
密码VVVV1111
,!234567
,AaAaAaAa
或A1!aA1!a
有效,密码VVVVVVVV
,12345678
,aaaaaaa
,{ {1}}不是。
如何制作2个4或者正则表达式中的2个?
我想出了3个条件(A-Z,a-z和0-9):
!!!!!!!
但我认为必须有一个更好的选择,因为这个正则表达式在第四个条件下变得非常大。
答案 0 :(得分:7)
始终将大问题分解为较小的问题。
为您的四种不同条件中的每一种定义一个单独的正则表达式,然后检查它们是否已满足。
例如:
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漫画:
答案 1 :(得分:3)
您可以使用以下表达式:
/[a-z]/.test(pass)+/[A-Z]/.test(pass)+/\d/.test(pass)+/[.!@#$%^&*()_]/.test(pass)>2