2012-06-01 51 views
0

我想验证在Java中的电子邮件字符串,但我遇到麻烦,以验证此字符串有两个或多个特殊字符时,这不是一个有效的电子邮件。验证使用正则表达式重复特殊字符

我如果这样做此验证如下:输出

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

例子:

this_e-mail'[email protected] - 返回true(正确)

this_e-mail_isn''[email protected] - return true(WRONG)

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

但我看遍了互联网找到一些答案,但没有成功。

我刚刚读过表达前使用“\ 1+”,它应该做这个验证,但显然它没有。

在此先感谢您的答案!

回答

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 

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

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

+0

就是这样!我的验证不仅仅是这样,而且仅限于这两个字符,以至于我遇到了一些问题......但现在已经解决了!谢谢!! –

0

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

为了检测一堆可能出现零次或多次的特殊字符,你需要使用[]和*指令是这样的:

[#'&!?]* 

这将匹配#任何数字或'或!要么 ?

它可以通过使用\ W甚至更酷,这意味着任何不是你会在单词中找到的字符。

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

+0

这不是每一个特殊的字符,它只是它们的一部分,如果被任何\\ w char分隔,它可能包含很多这些字符。对不起,因为我忘记提到正则表达式中的字符是不能通过的字符!正如我所说,这只是验证的一部分,而其他不属于此验证的特殊字符在另一个字符中。但谢谢你的答案! –