根据API值检查密码强度

时间:2015-06-05 07:46:05

标签: javascript html jquery-mobile

我从API获取密码规范,然后将对象拆分为所需的字段,并检查我是否具有所需的密码的较低,较高,特殊和长度。

    function isStrong(passwordChecker) {

    if (!passwordChecker) {
        return false;
    }

    debugger;
    var securityOption = JSON.parse(localStorage.getItem("Security"));

    var MinLength = securityOption.PasswordMinRequiredLength;
    var SpecialChars = securityOption.PasswordMinRequiredNonalphanumericCharacters;
    var MinLowercase = securityOption.PasswordMinRequiredLowercase;
    var MinUppercase = securityOption.PasswordMinRequiredUppercase;

    //LenghtCheck
    if (passwordChecker.length < MinLength);
        return false;

    if (!CountSpecialChars(passwordChecker) > SpecialChars) {
        return false;
    }

    if (MinLowercase > 0) {
        if (!CountLowerCase(passwordChecker) > MinLowercase) {
            return false;
        }
    }

    if (MinUppercase > 0) {
        if (!CountUpperCase(passwordChecker) > MinLowercase) {
            return false;
        }
    }    
}

function CountSpecialChars(text) {
    var Count = 0;
    for (var i = 0; i < text.length; i++) {
        var c = text[i];

        if (text[i] >= 33 && text[i] <= 63){
            Count++;
        }        
    }
}

function MinLowercase(text) {
    var Count = 0;
    for (var i = 0; i < text.length; i++) {
        var c = text[i];
        if (text[i] >= 97 && text[i] <= 122) {
            Count++;
        }
    }
}

function MinUppercase(text) {
    var Count = 0;
    for (var i = 0; i < text.length; i++) {
        var c = text[i];
        if (text[i] >= 65 && text[i] <= 90) {
            Count++;
        }
    }
}

现在我想做的是,检查不同的条件作为一个整体,如果所有条件都为真,那么将类更改为绿色..

        $(pageId + ' #password').bind('keyup', function () {
        var currentpassword = $(pageId + ' #password').val();
        if (isStrong(currentpassword)) {
            $(pageId + ' #password').addClass('green');

        } else {
            $(pageId + ' #password').addClass('red');
        }

    });

我不确定如何检查整个条件并返回整体真实,因为当我开始尝试使用我的密码时,它立即变为绿色,因为在我的密码规范中您不需要任何UpperCase或LowerCase字母等等输入一个char它返回true ..

1 个答案:

答案 0 :(得分:2)

您应该重构您的函数,以便它们接受字符串和参数并返回true或false。例如:

function CountSpecialChars(text) {
    var Count = 0;
    for (var i = 0; i < text.length; i++) {
        var c = text[i];

        if (text[i] >= 33 && text[i] <= 63){
            Count++;
        }        
    }
}

if (!CountSpecialChars(passwordChecker) > SpecialChars) {
        return false;
    }

应改为:

function CountSpecialChars(text, min) {
    var count = 0;
    for (var i = 0; i < text.length; i++) {
        var c = text[i];

        if (text[i] >= 33 && text[i] <= 63){
            count++;
        }
    }

    return count > min;

}


return CountSpecialChars(passwordChecker, SpecialChars);

另外,作为奖励,您还可以使用replace来避免这些函数的循环,如下所示:

function MinChars(text, min) {

    return text.length > min;

}

function MinUppercase(text, min) {

    var non_uppers = /[^A-Z]/g;

    var uppers =  text.replace(non_uppers, text);

    return uppers.length > min;

}

function MinLowercase(text, min) {

    var non_lowers = /[^a-z]/g;

    var lowers =  text.replace(non_lowers, text);

    return lowers.length > min;

}

function MinSpecialChars(text, min) {

    var non_specials = /[^!-\?]/g;

    var specials =  text.replace(non_specials, text);

    return specials.length > min;

}

现在有了这些功能,你可以拥有:

if !MinChars(pw, MinLength) return false;
if !MinSpecialChars(pw, SpecialChars) return false;
if !MinLowercase(pw, MinLowercase) return false;
if !MinUppercase(pw, MinUppercase) return false;
return true;