进一步修改密码的正则表达式

时间:2011-12-11 00:44:08

标签: javascript regex

你如何修改这个正则表达式只允许字母和数字?

我认为它必须至少包含2个大写字母,小写字母和数字,以便将表达式限制为仅适用于那些类型的字符。但它允许不需要的字符,如波浪形等。

/^[\s]*((?=([^\s]*\d){2,})(?=([^\s]*[a-z]){2,})(?=([^\s]*[A-Z]){2,})[^\s]{8,16})[\s]*$/

3 个答案:

答案 0 :(得分:2)

我没有看到单个正则表达式在其他小写字母和数字中计算大写字母的方法。正如他们所说,正则表达式无法计算。

所以,我认为你的解决方案需要一个正则表达式来确定存在相应的字母,然后在单独的步骤中你可以计算大写字符:

/[A-Za-z0-9]{8,16}/

对于后续步骤(验证字符串是否至少包含两个大写字母,两个小写字母和两个数字),请尝试以下三个正则表达式:

/[A-Z].*[A-Z]/
/[0-9].*[0-9]/
/[a-z].*[a-z]/

与所有四个正则表达式匹配的任何字符串都将符合您的密码标准。

话虽这么说,没有正则表达式创建函数可能更容易,只需在循环中进行简单的字符计数。

FWIW是探索构建正则表达式的替代方法的好工具,是访问http://txt2re.com

答案 1 :(得分:1)

这是使用几根针进行的方法。 fiddle

alert( verify('AbcdeFghij123') );
alert( verify('Abcdeghij123') ); // Only 1 capital
alert( verify('AbcdeFghij') ); // No numbers
alert( verify('ABCDEF123') ); // No lowercase
alert( verify('Abc~~ghij123') ); // Tilde
alert( verify('') ); // Blank

function verify(pass) {
    return /^[A-Za-z0-9]+$/.test(pass)
        && /[A-Z][^A-Z]*[A-Z]/.test(pass)
        && /[a-z][^a-z]*[a-z]/.test(pass)
        && /[0-9][^0-9]*[0-9]/.test(pass);
}

如果您想将大小限制在X和Y之间,请将/^[A-Za-z0-9]+$/替换为/^[A-Za-z0-9]{X,Y}$/。很简单,嗯?

答案 2 :(得分:1)

这是一个经过测试的功能,可根据您的要求验证密码:

/*  Validate a password string that has:
    * From 8 to 16 letters and digits.
    * Optional leading and trailing whitespace.
    * At least 2 uppercase letters.
    * At least 2 lowercase letters.
    * At least 2 decimal digits.
    Here is the regex in (PHP) free-spacing mode with comments:
    $re = '/# Validate password has 2 upper, 2 lower and 2 digits.
        ^                        # Anchor to start of string.
        (?=(?:[^A-Z]*[A-Z]){2})  # Assert 2 uppercase letters.
        (?=(?:[^a-z]*[a-z]){2})  # Assert 2 lowercase letters.
        (?=(?:[^0-9]*[0-9]){2})  # Assert 2 decimal digits.
        \s*                      # Allow leading whitespace.
        ([A-Za-z0-9]{8,16})      # $1: Password 8-16 of [A-Za-z0-9]
        \s*                      # Allow trailing whitespace.
        $                        # Anchor to end of string.
        /x';
    If valid password, return password trimmed of leading and trailing whitespace.
    If invalid password, return empty string.
*/
function validatePassword(text)  {
    var re = /^(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[^a-z]*[a-z]){2})(?=(?:[^0-9]*[0-9]){2})\s*([A-Za-z0-9]{8,16})\s*$/;
    var m = text.match(re);
    if (m) return m[1];     // If valid, return trimmed password
    return '';              // If not valid, return empty string
}