在正则表达式和LDAP中排序

时间:2014-04-08 06:44:36

标签: regex ldap

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?

1 个答案:

答案 0 :(得分:2)

如果您将-放在[]内,则需要先将其[$-=]放在首位,这样就不会将其视为范围分隔符。在您的第一个示例中,您实际上是允许[_-=];在第二个中它变为_,因为=在词法{{1}}之后被拒绝。