用于密码验证的Reg-Ex失败

时间:2015-08-28 10:53:36

标签: regex

我的密码应该包含,

1. minimum 8 characters
2. minimum 1 special character
3. minimum 1 number

我使用以下注册表,

/^.*(?=.{8,})(?=.*d)(?=.*[A-z])(?=.*[!@#$%^&*? ]).*$/

但是这并不接受长度为8个字符的字符串AAAA2@AAAA,有一个特殊字符 @ 并且有一个数字 2 。我对RegEx知之甚少。你能告诉我这个表达有什么问题吗?

2 个答案:

答案 0 :(得分:3)

不接受字符串的原因是因为您忘记了d的斜杠,而正则表达式要求字母d位于字符串中。修复是

^(?=.{8,})(?=.*\d)(?=.*[A-Z])(?=.*[!@#$%^&*? ]).*$
 ^             ^^

将其与i修饰符一起使用。 See demo

[A-z]问题是well-known one。此外,应删除初始.*,或正则表达式的某些部分无法正确验证。

谈到优化:长度检查几乎总是可以移到最后:

^(?=.*\d)(?=.*[A-Z])(?=.*[!@#$%^&*? ]).{8,}$

请参阅another demo(再次注意i修饰符)。

另请参阅Fine-Tuning: Removing One Condition

  

如果您必须检查n条件,那么您的模式最多只需要包含n-1前瞻。通常,您甚至可以将多个条件组合到一个前瞻中。

至于您的条件如上( 1)最少8个字符,2)最少1个特殊字符,3)最少1个数字) - 没有英文字母要求< / em> - 你甚至可以使用

^(?=.*\d)(?=.*[!@#$%^&*? ]).{8,}$

答案 1 :(得分:2)

您可以使用:

^(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&*? ])[!@#$%^&*? a-zA-Z\d]{8,}$

[A-z]不正确且匹配可能更多字符在ASCII 65-122范围内,如[],等等。

RegEx Demo