Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 密码强度函数只返回一个vlaue_Javascript_Html_Passwords - Fatal编程技术网

Javascript 密码强度函数只返回一个vlaue

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

我是Javascript新手,我正在尝试编写一个密码强度函数。 但每次我输入密码时,它只返回一个值(“非常强”)。 我完全糊涂了!! 这是我的密码:

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;
}

有几个编码错误和逻辑错误。我建议进行以下修改/改进:

  • 获取实际密码值并使用其长度,而不是密码DOM元素的长度
  • 处理长度介于4和7之间的情况(逻辑跳过的情况)
  • 按正确的顺序排列正则表达式测试,以便它实际找到正确的分数
  • 更正了标点符号regex
  • 修正逻辑问题
  • 将颜色放入平行阵列中
  • 以更高效/紧凑的方式声明强度字符串
  • 给你的分数一个默认值,这样它就保证有一个值
  • 不要重复多次正则表达式测试
  • 使用
    regex.test
    ,因为当您只想知道它是否匹配时,它比
    regex.match
    更有效
  • 从数组中提取所需的颜色值,而不是针对每个分数使用
    if
    语句
  • 只获取一次
    spnPwd
    DOM元素
  • 将数字正则表达式更改为
    \d
  • 为安全起见,在所有if/else语句上使用大括号
  • 以及建议的守则:

    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