0

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

  1. 密码必须至少有一个字符。
  2. 密码必须至少有一个数字。
  3. 密码必须至少包含一个字母数字字符。(应允许多于一个)

我的尝试是这样的,

/^([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

两者都没有工作。我错过了什么?

4

3 回答 3

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;
}
于 2013-01-23T02:32:12.117 回答
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 个特殊字符,以任意顺序出现。

于 2013-01-23T02:33:32.830 回答
0

试试下面的。如果一个字符应该是第一个,数字应该是第二个,字母数字应该是下一个,它将起作用。

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

于 2013-01-23T02:38:50.720 回答