1)。我使用以下正则表达式验证电子邮件地址:
"^(?=.*\\d)(?=.*[A-Za-z])[A-Za-z0-9@~!%^*_#$-=.+,]{7,50}$"
问题是当使用上述正则表达式时,它工作正常。
但是当我改变部分中字符的顺序时:
[A-Za-z0-9@~!%^*_#$-=.+,] to [A-Za-z0-9@~*_-=.+!%^#$]
,
即,将字符'!%^#$'
放在+
之后,
它给出了一个例外:
[4/8/14 11:58:09:315 IST] 000000b4 SystemErr R java.util.regex.PatternSyntaxException: Illegal character range near index 38
^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9@~*_-=.+!%^#$]{7,50}$
How does ordering of characters matter in regex?
2)。我也在使用LDAP for registering and storing email addresses & passwords
。
为此,当我提供'!#$%'*-=?^_@testnone.com'
作为注册输入时:它正在抛出"javax.naming.NameAlreadyBoundException"
,但当我将电子邮件中的字符顺序更改为'!#$%'*?=^_-@testnone.com'
时,它能够寄存器。
基本上,我发现当我在电子邮件中最后放置'-'
时(在@之前)它可以正常工作,但是当我把它放在任何其他字符之前它会抛出异常。
How does ordering matter in LDAP?
答案 0 :(得分:2)
如果您将-
放在[]
内,则需要先将其[$-=]
放在首位,这样就不会将其视为范围分隔符。在您的第一个示例中,您实际上是允许[_-=]
;在第二个中它变为_
,因为=
在词法{{1}}之后被拒绝。