我参加了在线JavaScript测试,其中第3个问题如下:
完成checkPassword功能,该功能应检查密码参数是否符合以下规则:
>
我的解决方案如下:
function checkPassword(password) {
return /^[a-zA-Z0-9\+\$\\\/#]{6,}$/.test(password) && !/[0-9]{3,}/.test(password);
}

此解决方案为我提供了给定输入的正确输出。
但是最终的测试结果表明,解决方案只有75%是正确的。
我认为完美的答案应该只是一个正则表达式的解决方案。有没有人可以给我一个正则表达式给出相同的结果?我不太擅长正则表达,所以请指教。
我提前感谢您的帮助。
答案 0 :(得分:2)
一开始就使用negative lookahead。
^(?!.*?\d{3})[a-zA-Z0-9\+\$\\\/#]{6,}$
(?!.*?\d{3})
在开始时断言匹配将不包含至少三个连续数字。然后,仅当满足此条件时,正则表达式引擎才会尝试将模式[a-zA-Z0-9\+\$\\\/#]
与输入字符串匹配6次或更多次。
答案 1 :(得分:0)
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d]{6,}$
连续号码检查
public boolean isValid(final String userName,final String password) {
for(int i=0;(i+2)<userName.length();i++) if(password.indexof(userName.substring(i,i+2))!=-1) return false; return true;
}