Javascript 密码强度函数只返回一个vlaue
我是Javascript新手,我正在尝试编写一个密码强度函数。 但每次我输入密码时,它只返回一个值(“非常强”)。 我完全糊涂了!! 这是我的密码:Javascript 密码强度函数只返回一个vlaue,javascript,html,passwords,Javascript,Html,Passwords,我是Javascript新手,我正在尝试编写一个密码强度函数。 但每次我输入密码时,它只返回一个值(“非常强”)。 我完全糊涂了!! 这是我的密码: function pwd_Validation() { var strength = new Array(); strength[0] = "Blank"; strength[1] = "Very Weak"; strength[2] = "Weak"; str
function pwd_Validation()
{
var strength = new Array();
strength[0] = "Blank";
strength[1] = "Very Weak";
strength[2] = "Weak";
strength[3] = "Medium";
strength[4] = "Strong";
strength[5] = "Very Strong";
var password = document.getElementById('pwd')
if (password.length < 1)
var score = 1;
else if (password.length < 4)
score = 2
else if (password.length >= 8 && password.value.match(/[a-z]/))
score = 3;
else if (password.length >= 8 && password.value.match(/[a-z]/) && password.value.match(/[A-Z]/) && password.value.match(/[0-9]/))
score = 4;
else (password.length >= 8 && password.value.match(/[a-z]/) && password.value.match(/[A-Z]/) && password.value.match(/[0-9]/) && password.value.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,£,(,)]/))
score = 5;
document.getElementById('spnPwd').innerHTML = strength[score];
if ( password.value = "")
document.getElementById('spnPwd').innerHTML = strength[0];
document.getElementById('spnPwd').style.color="#FF0000"
if ( strength[score] == 1)
document.getElementById('spnPwd').innerHTML = strength[1];
document.getElementById('spnPwd').style.color="#FF0000"
if ( strength[score] == 3)
document.getElementById('spnPwd').innerHTML = strength[3];
document.getElementById('spnPwd').style.color="#FFCC00"
if ( strength[score] == 4)
document.getElementById('spnPwd').innerHTML = strength[4];
document.getElementById('spnPwd').style.color="#19D119"
if ( strength[score] == 5)
document.getElementById('spnPwd').innerHTML = strength[5];
document.getElementById('spnPwd').style.color="#006600"
}
函数pwd_验证()
{
var-strength=新数组();
强度[0]=“空白”;
强度[1]=“非常弱”;
强度[2]=“弱”;
强度[3]=“中等”;
强度[4]=“强”;
力量[5]=“非常强大”;
var password=document.getElementById('pwd')
if(password.length<1)
var得分=1;
else if(password.length<4)
分数=2
else if(password.length>=8&&password.value.match(/[a-z]/))
得分=3分;
如果(password.length>=8&&password.value.match(/[a-z]/)&&password.value.match(/[a-z]/)&&password.value.match(/[0-9]/))
得分=4分;
else(password.length>=8&&password.value.match(/[a-z]/)&&password.value.match(/[a-z]/)&&password.value.match(/[0-9]/)&&password.value.match(/.[!,@,#,$,%,^,&,*,?,,,,,,,,-,,,(,)/)
得分=5分;
document.getElementById('spnPwd').innerHTML=strength[score];
如果(password.value=”“)
document.getElementById('spnPwd')。innerHTML=strength[0];
document.getElementById('spnPwd').style.color=“#FF0000”
如果(强度[分数]==1)
document.getElementById('spnPwd').innerHTML=strength[1];
document.getElementById('spnPwd').style.color=“#FF0000”
如果(强度[分数]==3)
document.getElementById('spnPwd').innerHTML=strength[3];
document.getElementById('spnPwd').style.color=“#FFCC00”
如果(强度[分数]==4)
document.getElementById('spnPwd').innerHTML=strength[4];
document.getElementById('spnPwd').style.color=“#19D119”
如果(强度[分数]==5)
document.getElementById('spnPwd').innerHTML=strength[5];
document.getElementById('spnPwd').style.color=“#006600”
}
HTML代码:
Password : <input type="password" id="pwd" onblur="pwd_Validation()" />
<span id="spnPwd" class="pwd_Strength" ></span><br />
密码:
最后一个else
中缺少一个if
,因此解析如下:
...
else {
(password.length >= 8 && password.value.match(/[a-z]/) && password.value.match(/[A-Z]/) && password.value.match(/[0-9]/) && password.value.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,£,(,)]/))
}
score = 5;
if(...)
...
else if(...)
...
else
...
在控件结构中始终使用括号是一个好习惯。您忘记将密码字段转换为其值:
var password = document.getElementById('pwd')
应该是
var password=document.getElementById('pwd')。值
在原始情况下,password.length
未定义,与它的所有比较结果都为false。(因此执行最后的else
)
另外,最后一个else
块
else (password.length >= 8 && password.value.match(/[a-z]/) && password.value.match(/[A-Z]/) && password.value.match(/[0-9]/) && password.value.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,£,(,)]/))
score = 5;
应该是
else if(password.length >= 8 && password.value.match(/[a-z]/) && password.value.match(/[A-Z]/) && password.value.match(/[0-9]/) && password.value.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,£,(,)]/))
score = 5;
除此之外,请在ifs中使用大括号。使用这样的代码是不好的做法:
...
else {
(password.length >= 8 && password.value.match(/[a-z]/) && password.value.match(/[A-Z]/) && password.value.match(/[0-9]/) && password.value.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,£,(,)]/))
}
score = 5;
if(...)
...
else if(...)
...
else
...
这样更好:
if(...){
...
}else if(...){
...
}else{
...
}
我已经通过了你的密码。这已经根据javascript解释器实际运行的方式重新嵌入了代码。请注意if语句是如何而不是运行您认为是的代码的
function pwd_Validation() {
var strength = new Array();
strength[0] = "Blank";
strength[1] = "Very Weak";
strength[2] = "Weak";
strength[3] = "Medium";
strength[4] = "Strong";
strength[5] = "Very Strong";
var password = document.getElementById('pwd')
if (password.length < 1) var score = 1;
else if (password.length < 4) score = 2
else if (password.length >= 8 && password.value.match(/[a-z]/)) score = 3;
else if (password.length >= 8 && password.value.match(/[a-z]/) && password.value.match(/[A-Z]/) && password.value.match(/[0-9]/)) score = 4;
else(password.length >= 8 && password.value.match(/[a-z]/) && password.value.match(/[A-Z]/) && password.value.match(/[0-9]/) && password.value.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,£,(,)]/))
score = 5;
document.getElementById('spnPwd').innerHTML = strength[score];
if (password.value = "") document.getElementById('spnPwd').innerHTML = strength[0];
document.getElementById('spnPwd').style.color = "#FF0000"
if (strength[score] == 1) document.getElementById('spnPwd').innerHTML = strength[1];
document.getElementById('spnPwd').style.color = "#FF0000"
if (strength[score] == 3) document.getElementById('spnPwd').innerHTML = strength[3];
document.getElementById('spnPwd').style.color = "#FFCC00"
if (strength[score] == 4) document.getElementById('spnPwd').innerHTML = strength[4];
document.getElementById('spnPwd').style.color = "#19D119"
if (strength[score] == 5) document.getElementById('spnPwd').innerHTML = strength[5];
document.getElementById('spnPwd').style.color = "#006600"
}
很可能您打算这样做:
if (strength[score] == 5) {
document.getElementById('spnPwd').innerHTML = strength[5];
document.getElementById('spnPwd').style.color = "#006600"
}
此外:
你可能是说:
else if (password.length >= 8 && password.value.match(/[a-z]/) && password.value.match(/[A-Z]/) && password.value.match(/[0-9]/) && password.value.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,£,(,)]/)) {
score = 5;
}
您在代码中提到的实际问题是因为我已提取的第二个条件。行
score=5
不是任何条件的部分,并且将始终运行(出于上述原因)。这就是为什么您总是看到密码“非常强”。您保存到var分数,然后询问强度[score]<代码>如果(强度[分数]=3)
那么您在代码的第二部分中缺少了一些{}
在最后一部分中,您可以使用
switch(score) {
case 1: ... break;
...
default: ... break;
}
有几个编码错误和逻辑错误。我建议进行以下修改/改进:
regex.test
,因为当您只想知道它是否匹配时,它比regex.match
更有效if
语句spnPwd
DOM元素\d
function pwd_Validation() {
var strengths = ["Blank", "Very Weak", "Weak", "Medium", "Strong", "Very Strong"];
var colors = ["#FF0000", "#FF0000", "#FFCC00", "#FFCC00", "#19D119", "#006600"];
var score = 0;
var regLower = /[a-z]/, regUpper = /[A-Z]/, regNumber = /\d/, regPunctuation = /[.,!@#$%^&*?_~\-£()]/;
var password = document.getElementById('pwd').value;
if (!password) {
score = 0;
} else if (password.length < 2) {
score = 1;
} else if (password.length < 4) {
score = 2;
} else if (password.length <= 7) {
score = 3;
} else {
// length is >= 8 in here
if (regLower.test(password) && regUpper.test(password) && regNumber.test(password)) {
// if it also has punctuation, then it gets a 5, otherwise just a 4
if (regPunctuation.test(password)) {
score = 5;
} else {
score = 4;
}
} else {
// if doesn't have upper, lower and numbers, then it gets a 3
score = 3;
}
}
var spanPwd = document.getElementById('spnPwd');
spanPwd.innerHTML = strengths[score];
spanPwd.style.color = colors[score];
}
函数pwd_验证(){
风险价值强度=[“空白”、“非常弱”、“弱”、“中等”、“强”、“非常强”];
变量颜色=[“FF0000”、“FF0000”、“FFCC00”、“FFCC00”、“19D119”、“006600”];
var得分=0;
变量regLower=/[a-z]/,regUpper=/[a-z]/,regNumber=/\d/,regsparentation=/[,!@$%^&*?\-£()]/;
var password=document.getElementById('pwd')。值;
如果(!密码){
得分=0;
}else if(password.length<2){
得分=1分;
}else if(password.length<4){
得分=2分;
}如果(此处的password.length=8),则为else
if(regLower.test(密码)&®Upper.test(密码)&®Number.test(密码)){
//如果它也有标点符号,那么它得到5,否则只有4
if(标点符号测试(密码)){
得分=5分;
}否则{
得分=4分;
}
}否则{
//如果没有上限、下限和数字,则得到3
得分=3分;
}
}
var spanPwd=document.getElem