0

我想对密码执行 JavaScript 验证。

它必须满足以下条件:

  • 至少 6 个字符长
  • 至少 1 个大写字母
  • 至少 1 个小写字母
  • 至少 1 个号码
  • 至少 1 个标点符号
4

2 回答 2

4

这是使用正则表达式数组的一种方法:  

/** 
  * Returns true if pw is a valid password.
  */

function isValid(pw) {

    if (! pw) {
        return false;
    }

    var rgx = [
        /.{6,}/,
        /[A-Z]/,
        /[a-z]/,
        /[0-9]/, 
        /[@#$&*^%!+=\/\\[\]|?.,<>)(;:'"~`]/
    ];

    for (var i = 0; i < rgx.length; i++) {
        if (rgx[i].test(pw) === false) {
            return false;
        }
    }
    return true;        
}

工作示例

您可以通过将正则表达式数组作为参数传递来使其更加灵活。

更多关于 regex.test() 的阅读在这里


这是更具可读性的学术版本:

function isValid(s) { 
    // check for null or too short
    if (!s || s.length < 6) {
        return false;
    }
    // check for a number
    if (/[0-9]/.test(s) === false) {
        return false;
    }
    // check for a capital letter
    if (/[A-Z]/.test(s) === false) {
        return false;
    }
    // check for a lowercase letter
    if (/[a-z]/.test(s) === false) {
        return false;
    }     
    // check for punctuation mark
    if (/[@#$&*^%!+=\/\\[\]|?.,<>)(;:'"~`]/.test(s) === false) {
        return false;
    }
    // all requirements have been satisfied
    return true; 
}

这是一个工作示例

于 2013-08-21T22:22:38.397 回答
0

可以使用单个正则表达式完成验证:

var pw = "letMe1n!"; // Read this from an <input> field

// Validation:    
if (/^(?=.*[.,?!])(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z]).{6,}/.test(pw)) {
  // The password is valid!
}

[.,?!]如果需要,可以扩展标点字符集。

于 2013-08-21T21:04:13.250 回答