正则表达式验证具有字符限制的密码

时间:2013-09-04 20:55:32

标签: regex passwords

我需要使用以下规则验证密码:

  • 6到20个字符
  • 必须至少包含一位数字;
  • 必须至少包含一个字母(不区分大小写);
  • 可以包含以下字符:! @#$%& *

以下表达式匹配除最后一个要求之外的所有要求。我能用最后一个做什么?

((?=.*\d)(?=.*[A-z]).{6,20})

3 个答案:

答案 0 :(得分:6)

我不完全确定我有这个权利,但由于您的上一个要求是“ 可以 包含以下字符:!@#$%& *”我假设不允许其他特殊字符。换句话说,唯一允许的字符是字母,数字和特殊字符!@#$%& *。

如果这是正确的解释,则以下正则表达式应该起作用:

^((?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9!@#$%&*]{6,20})$

请注意,我已将您的角色类[A-z]更改为[a-zA-Z],因为[A-z]还将包含以下字符:[\ _] ^ _`

我还添加了字符串锚点的开头和结尾,以确保您没有得到部分匹配。

答案 1 :(得分:1)

^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9!@#$%&*]{6,20}$

答案 2 :(得分:0)

正则表达式可能是: -

^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9!@#$%&*]{6,20}$

Javascript中的this如何: -

function checkPwd(str) {
    if (str.length < 6) {
        return("too_short");
    } else if (str.length > 20) {
        return("too_long");
    } else if (str.search(/\d/) == -1) {
        return("no_num");
    } else if (str.search(/[a-zA-Z]/) == -1) {
        return("no_letter");
    } else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+]/) != -1) {
        return("bad_char");
    }
    return("ok");
}

另请查看this