【发布时间】:2013-01-23 02:10:11
【问题描述】:
我有正则表达式,可以测试以下规则,
- 密码必须至少有一个字符。
- 密码必须至少有一个数字。
- 密码必须至少包含一个字母数字字符。(应允许多于一个)
我的尝试是这样的,
/^([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
两者都不起作用。我错过了什么?
【问题讨论】:
-
是否有任何合法理由你必须将所有这些都塞进一个正则表达式中?
-
我对你的解释感到困惑。密码的各个部分是否必须按照您指定的顺序出现?就像,它必须是(字母字符)(数字)(特殊字符),还是可以是每个至少 1 个的任意组合?我也很困惑为什么你在
[ ]里面有+... -
如果它们必须按这个顺序排列,那么您应该使用:
/^([a-zA-Z]+[0-9]+[!@#$%^&*]+)$/。将+放在[ ]之外意味着匹配集合中的至少1 个字符。所以至少你可以有类似a2&的东西。将+放在[ ]内意味着匹配+字符。所以从技术上讲,你可以在你的正则表达式中输入密码++*并且它会通过。我认为它不应该... -
如果您不需要订购,请尝试类似:
/(?=[^a-zA-Z]*[a-zA-Z])(?=[^0-9]*[0-9])(?=[^!@#$%^&*]*[!@#$%^&*])/,它只需要密码中的每个至少 1 个。 jsfiddle.net/bJTTk/1
标签: javascript regex validation passwords