使用正则表达式验证重复的特殊字符

时间:2012-06-01 01:40:42

标签: java regex validation email

我正在尝试用Java验证电子邮件字符串,但是我很难验证此字符串何时有两个或更多特殊字符,这不是有效的电子邮件。

如果这样做,我的验证如下:

if (email.matches("(._\'!#$%&*+-\\/=?{|}~`^_-)\\1+")) {
    return false;
}

输出示例:

  

this_e-mail's_valid@domain.com - return true(CORRECT)

     

this_e-mail_isn''t_valid@domain.com - 返回true(错误)

显然我的正则表达式有问题。

但我在互联网上找了一些答案,但没有成功。

我刚刚在表达式之前阅读过使用“\ 1+”,它应该进行此验证,但显然它没有。

提前感谢您的答案!

2 个答案:

答案 0 :(得分:0)

我完全不确定你的要求。电子邮件验证不仅仅是这个。

但是,如果要检测字符串是否连续有2个特殊字符,可以使用

!string.matches("^.*([._\'!#$%&*+\\\\/=?{|}~`\\^-])\\1.*$") // It will invalidate the case that 2 consecutive characters are the same. e.g. not__valid, but it will give OK for va+-lid
OR
!string.matches("^.*[._\'!#$%&*+\\\\/=?{|}~`\\^-]{2}.*$") // Any sequence of consecutive special characters will be invalidate. e.g. not_+valid

请注意,我在逻辑上否定了结果。如果它包含连续的字符,我匹配字符串。

我已经测试并纠正了早期版本中的错误。

答案 1 :(得分:0)

好的,首先你的正则表达式试图检测一些特殊字符。 $表示一行的结尾,而\ $表示一个美元符号。每当你需要一个特殊角色时,你需要在它之前使用\来逃避它。因此,我相信你想要检测$,花括号,管道,星号,问号和加号。这些只是你需要逃脱的许多特殊角色中的一小部分。

要检测一堆可能出现零次或多次的特殊字符,您需要使用[]和*指令,如下所示:

[#'&!?]*

这将匹配任意数量的#或'要么 !还是?

使用\ W可以变得更酷,这意味着任何不是你在一个单词中找到的角色。

我希望这有助于解决您的问题。听起来你可以从这个链接中受益: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html