0

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

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

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

输出示例:

this_e-mail's_valid@domain.com - 返回真(正确)

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

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

但是我在互联网上到处寻找答案,但没有成功。

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

提前感谢您的回答!

4

2 回答 2

0

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

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

[#'&!?]*

这将匹配任意数量的 # 或 ' 或 ! 或者 ?

使用 \W 可以变得更酷,这意味着任何不是您在单词中找到的字符。

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

于 2012-06-01T01:59:18.443 回答
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

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

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

于 2012-06-01T01:51:12.150 回答