在密码中允许多个特殊字符

时间:2013-01-23 02:10:12

标签: javascript regex validation passwords

我有正则表达式,用于测试以下规则,

  1. 密码必须至少有一个字符。
  2. 密码必须至少包含一个数字。
  3. 密码必须至少有一个字母数字字符。(应该允许多于一个)
  4. 我的尝试就是这个,

    /^([a-zA-Z+]+[0-9+]+[!@#$%^&*])$/
    

    除了我添加多个字母数字字符外,大多数情况都可以正常工作。

    测试

    • 测试[qwer1234]结果[无效]结论[通过]
    • 测试[qwer1234 $]结果[有效]结论[通过]
    • 测试[qwer1234#$]结果[无效]结论[失败]

    最后一次测试应该通过但是失败了。我知道哪里出了问题,但无法摆脱正则表达式的魔力。我对错误的看法是,

    [0-9+] // This + sign shows that you can have more then 1 of that range of numerics
    

    其中,

    [!@#$%^&*] // Does not have the + sign
    

    我试过了,

    [!@#$%^&*+] // Does not have the + sign
    [!@#$%^&*]+ // Does not have the + sign
    

    两者都不起作用。我错过了什么?

3 个答案:

答案 0 :(得分:1)

为什么需要将它们全部混合到一个正则表达式中?

function test_password(password) {
    if (password.length < 2) return false;            // Minimum length
    if (!/[0-9]/g.test(password)) return false;       // Needs a number
    if (!/[a-z]/gi.test(password)) return false;      // Needs a letter
    if (!/[^a-z0-9]/gi.test(password)) return false;  // Needs a special char

    return true;
}

答案 1 :(得分:1)

根据您的实际需要,从您对您的情况的混乱描述,这里有两个我希望有帮助的正则表达式。第一个要求密码以至少1个字母字符开头,至少有1个数字字符,然后至少有1个特殊字符。

/^([a-zA-Z]+[0-9]+[!@#$%^&*]+)$/

http://jsfiddle.net/ECwP8/

如果您不要求字符按特定顺序排列,则可以尝试使用此正则表达式:

/(?=[^a-zA-Z]*[a-zA-Z])(?=[^0-9]*[0-9])(?=[^!@#$%^&*]*[!@#$%^&*])/

http://jsfiddle.net/bJTTk/1/

这个只需要在密码中以任何顺序出现至少1个字母字符,至少1个数字字符和至少1个特殊字符。

答案 2 :(得分:0)

尝试以下方法。如果一个字符应该是第一个,数字应该是第二个,并且下一个应该是字母数字,它将起作用。

/ ^ [A-ZA-Z] + [1-9] + [@#$%^&安培;!*] + $ /