验证密码常规exp Jquery

时间:2014-07-31 08:27:49

标签: jquery regex validation

在前端方面,我有一些密码验证,用户能否输入好密码,这是我用来检查密码

function passwordStrengthCheck(password1, password2, passwordsInfo) {
    //Must contain 5 characters or more
    var WeakPass = /(?=.{10,}).*/;
    //Must contain lower case letters and at least one digit.
    var MediumPass = /^(?=\S*?[a-z])(?=\S*?[0-9])\S{10,}$/;
    //Must contain at least one upper case letter, one lower case letter and one digit.
    var StrongPass = /^(?=\S*?[A-Z])(?=\S*?[a-z])(?=\S*?[0-9])\S{10,}$/;
    //Must contain at least one upper case letter, one lower case letter and one digit.
    var VryStrongPass = /^(?=\S*?[A-Z])(?=\S*?[a-z])(?=\S*?[0-9])(?=\S*?[^\w\*])\S{10,}$/;

    $(password1).on('keyup', function (e) {
        if (VryStrongPass.test(password1.val())) {
            passwordsInfo.removeClass().addClass('vrystrongpass').html("Please repeat password!");
            $('#password').addClass('passed');
            $('#passwordRepeat').attr('readonly', false);
        }
        else if (StrongPass.test(password1.val())) {
            passwordsInfo.removeClass().addClass('strongpass').html("Enter special chars to make even stronger");
            $('#passwordRepeat').attr('readonly', true);
        }
        else if (MediumPass.test(password1.val())) {
            passwordsInfo.removeClass().addClass('goodpass').html("Enter uppercase letter to make strong");
            $('#passwordRepeat').attr('readonly', true);
        }
        else if (WeakPass.test(password1.val())) {
            passwordsInfo.removeClass().addClass('stillweakpass').html("Enter digits to make good password");
            $('#passwordRepeat').attr('readonly', true);
        }
        else {
            passwordsInfo.removeClass().addClass('weakpass').html("Must be 10 or more characters");
            $('#passwordRepeat').attr('readonly', true);
        }
    });

问题是我需要的,当用户输入所有大字母,如 QWEYUDDNNJDD @ 1 它仍然说输入数字,但数字是否存在?但所有的字母都是大帽子,这种方式规则不承认数字我不知道的方式,而且我需要验证说用户已经输入所有大字母,我不想允许,是否有一个简单的规则来检查如果所有字母都很大,那也是为什么所有大字母数字都不能识别?

这是工作小提琴,请输入所有大字母和数字,你会看到一些错误

http://jsfiddle.net/4G4g9/

1 个答案:

答案 0 :(得分:0)

我想我只需使用小写字母,大写字母和数字的检查来简化这一过程。 (对于一个非常强大的密码,我可能还会检查除了这些之外的其他内容。)

var lcletter = /[a-z]/;
var ucletter = /[A-Z]/;
var digit = /\d/;
var other = /[^\dA-Za-z]/;

if (lcletter.test(thePassword) && ucletter.test(thePassword) && digit.test(thePassword) && other.test(thePassord)) {
    // Very strong
}
else if (lcletter.test(thePassword) && ucletter.test(thePassword) && digit.test(thePassword)) {
    // Fairly strong
}
else if ...

通过单独进行测试,您不会遇到字符串中找到字符的顺序与您在表达式中列出字符的顺序之间的问题。

我只需要查看thePassword.length,就可以在那里提出长度要求。