允许密码中包含多个特殊字符
2013-01-23
147
我有测试以下规则的正则表达式,
- 密码必须至少有一个字符。
- 密码必须至少有一个数字。
- 密码必须至少有一个字母数字字符。(应允许多个)
我的尝试是这样的,
/^([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个回答
根据您的实际需要,根据您对情况的困惑的描述,这里有两个正则表达式,我希望它们能有所帮助。第一个要求密码至少以 1 个字母字符开头,其次是 1 个数字字符,最后是 1 个特殊字符。
/^([a-zA-Z]+[0-9]+[!@#$%^&*]+)$/
如果您不要求字符按特定顺序出现,可以尝试以下正则表达式:
/(?=[^a-zA-Z]*[a-zA-Z])(?=[^0-9]*[0-9])(?=[^!@#$%^&*]*[!@#$%^&*])/
这个只要求密码中至少有 1 个字母字符、至少 1 个数字字符和至少 1 个特殊字符,顺序不限。
Ian
2013-01-23
为什么需要将所有内容混合成一个正则表达式?
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;
}
Blender
2013-01-23
尝试以下操作。如果字符应放在第一位、数字应放在第二位、字母数字应放在接下来,则此方法有效。
/^[a-zA-Z]+[1-9]+[!@#$%^&*]+$/
Sameera Kumarasingha
2013-01-23