>我有正则表达式,可以测试遵循规则,
- 密码必须至少包含一个字符。
- 密码必须至少包含一个数字。
- 密码必须至少包含一个字母数字字符(应允许多个字符)
我的尝试是这样的,
/^([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 个字母字符开头,第二个至少包含 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 个特殊字符。
为什么需要将它们全部混合到一个正则表达式中?
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;
}
请尝试以下操作。如果字符应该是第一个,数字应该是第二个,那么它应该在下一个
。/^[a-zA-Z]+[1-9]+[!@#$%^&*]+$/