2015-08-28 138 views
1

大家好,我的密码应当包含,注册-Ex的密码验证失败

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

我使用下面的REG-EX,

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

但这并不接受字符串[email protected]这是8个字符长,具有一个特殊字符@并且具有一个数字。我对RegEx知之甚少。你能告诉我这个表达有什么问题吗?

回答

3

原因为什么字符串不被接受是因为您忘记了d的斜杠,并且正则表达式要求字母d位于第e字符串。修复是

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

i改性剂使用它。 See demo

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

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

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

another demo(再次,注意i修改)。

此外,见Fine-Tuning: Removing One Condition

如果你必须检查n条件,你的模式只需要在包括n-1向前看符号之最。通常情况下,您甚至可以将多个条件合并为一个预览。

而至于你的条件与上述(1)最少8个字符,2)最小的一个特殊字符,3)最低1号) - 没有英文字母要求 - 你甚至可以使用

^(?=.*\d)(?=.*[[email protected]#$%^&*? ]).{8,}$ 
+1

嗯,这将匹配'AAAA2 @ [] AA',因为'['和']'不在提供的字符类中,所以不能从问题中清楚这是否正确。 – anubhava

2

您可以使用:

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

[A-z]是不正确的,将ASCII内匹配可能更多的字符65-122范围内像[],`等

RegEx Demo

+0

1.对于'aaaaaaaaaa1!','ABCabc1!'或任何没有字符'd'的字符串,此表达式失败。 2.用户只能在我的要求中输入没有大写字母的小写字母,但是这个表达式要求字符串有一个小写字母和大写字母 – DRB

+1

它实际上是一个来自问题的复制/粘贴错误。 'd'应该是数字的'\ d'。现在查看更新的一个。 – anubhava