Javascript 随着密码长度的增加,放宽密码复杂性要求
我有以下JavaScript函数:Javascript 随着密码长度的增加,放宽密码复杂性要求,javascript,passwords,Javascript,Passwords,我有以下JavaScript函数: function checkPassword(password) { if (password.match(/[A-Z]/) && password.match(/[a-z]/) && password.match(/[0-9]/) && password.match(/[£:#@~\.,|(etc....)]/) && passwo
function checkPassword(password) {
if (password.match(/[A-Z]/)
&& password.match(/[a-z]/)
&& password.match(/[0-9]/)
&& password.match(/[£:#@~\.,|(etc....)]/)
&& password.length >= 6) {
return true;
} else {
return false;
}
}
我想做的是修改它,当密码长度超过16时,只需要3个大写、小写、数字和符号,超过32个字符只需要2个字符类型。我该怎么办
到目前为止,这就是我所拥有的,但它似乎很大,我相信一定有更好、更高效或至少更整洁的方法:
function checkPassword(password) {
var matched = 0;
if (password.match(/[A-Z]/)) {
matched++;
}
if (password.match(/[a-z]/)) {
matched++;
}
if (password.match(/[0-9]/)) {
matched++;
}
if (password.match(/[£:#@~\.,|(etc....)]/)) {
matched++;
}
if (matched >= 4 && password.length >= 6) {
return true;
}
if (matched >= 3 && password.length >= 16) {
return true;
}
if (matched >= 2 && password.length >= 32) {
return true;
}
return false;
}
我认为我的问题在于,我有两个变量
匹配
和密码.length
,我需要检查它们的值。计算它匹配的字符类型类别的数量,并将其添加到Math.floor(password.length/16.0)
(即16进入密码的整数倍)。然后,只需检查总值是否至少为4。这仍然需要代码的第一部分:
function checkPassword(password) {
var matched = 0;
if (password.match(/[A-Z]/)) {
matched++;
}
if (password.match(/[a-z]/)) {
matched++;
}
if (password.match(/[0-9]/)) {
matched++;
}
if (password.match(/[£:#@~\.,|(etc....)]/)) {
matched++;
}
…但其余的更简单,只需检查一个条件:
matched += Math.floor(password.length/16.0);
if (matched >= 4 && password.length > 6) {
return true;
}
return false;
}
如果你想进一步缩短它,你可以把你的正则表达式放在一个列表中,然后在上面循环
请记住,如果用户的密码不够好,您将很难向用户解释丢失了什么:通常,显示一条特定于用户密码丢失内容的错误消息(例如大写字母、符号等)会很有帮助。你不会有这个,因为你不知道他们遗漏了什么(而且他们有多个选项来修复它,所以他们没有遗漏什么)。如果您想显示好的、特定的错误消息,那么代码就太长了。我必须对此给出额外的想法,但下面的技巧如何:
var password = "S0m3p@ssword";
var count= 0;
var r = password.replace(/([A-Z])|([a-z])|([0-9])|([£:#@~\.,])/g,function(match,upperChars,lowersChars,numbers,specialChars){
count = count +1;
if (count >= 4 && password.length >= 6) {
return "match1";
}
if (count >= 3 && password.length >= 16) {
return "match2";
}
if (count >= 2 && password.length >= 32) {
return "match3";
}
return "";
});
console.log(r);
在上面的示例中,if
r.length>0
表示密码有效。似乎需要某种类型的if-else。。。