2011-11-20 123 views
71

首先,我知道使用正则表达式的电子邮件不建议,但我得测试一下。Java正则表达式电子邮件

我有这样的正则表达式:

\b[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b 

在Java中,我这样做:

Pattern p = Pattern.compile("\\b[A-Z0-9._%-][email protected][A-Z0-9.-]+\\.[A-Z]{2,4}\\b"); 
Matcher m = p.matcher("[email protected]"); 

if (m.find()) 
    System.out.println("Correct!"); 

然而,正则表达式不管邮件是否为WEL-形成或不失败。 Eclipse中的“查找和替换”工作正常使用相同的正则表达式。

有什么想法?

感谢,

+3

的一个问题是区分大小写。您应该为模式使用Patterm.compile(“...”,Pattern.CASE_INSENSITIVE)构造函数。 –

+1

为什么不建议在Java中使用正则表达式进行电子邮件验证? –

+0

http://emailregex.com/使用本网站提供的正则表达式。它声称有99.99%正确的电子邮件正则表达式 –

回答

135

FWIW,这里是我们用来验证电子邮件地址的Java代码。正则表达式的非常相似:

public static final Pattern VALID_EMAIL_ADDRESS_REGEX = 
    Pattern.compile("^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE); 

public static boolean validate(String emailStr) { 
     Matcher matcher = VALID_EMAIL_ADDRESS_REGEX .matcher(emailStr); 
     return matcher.find(); 
} 

工作相当可靠。

+4

只有两个反例:[email protected]üller.de(有效和拒绝你的例子),[email protected](我的电子邮件,有效并被你的例子拒绝 – Matteo

+8

这个正则表达式是不完整的。请参阅我的[回复](http://stackoverflow.com/a/13013056/1129542)以获得符合RFC 822的验证 – ejboy

+10

对于一个简单的解决方案,匹配99.9%的电子邮件地址这是一个很好的解决方案 – maloney

4

那是因为你忘记不区分大小写:

Pattern regex = Pattern.compile("\\b[\\w.%-][email protected][-.\\w]+\\.[A-Za-z]{2,4}\\b"); 

这符合你的榜样,但它忽略了许多有效的电子邮件。

+3

+ 1为“忽略许多有效的电子邮件” – Matteo

7

不要。你永远不会得到一个有效的表达式。

例如,这些都是有效的电子邮件地址:

"Abc\@def"@example.com 
"Fred Bloggs"@example.com 
"Joe\\Blow"@example.com 
"[email protected]"@example.com 
customer/[email protected]­ le.com 
[email protected] 
!def!xyz%[email protected] 
[email protected] 
matteo(this is a comment)[email protected] 
[email protected][127.0.0.1] 

仅举几个问题:

  • 你不考虑指定的主机(例如,许多形式的,由IP地址)
  • 你错过了有效的字符
  • 你错过了非ASCII域名

甚至已经开始检查相应的RFC

+1

带空格的电子邮件?即使某个地方决定电子邮件可以有空间,这似乎也是非常无效的。 –

+0

http://emailregex.com/这个网站声称有99%的电子邮件正确的正则表达式 –

+0

@MenukaIshan因为他们声称自己的正则表达式永远不会完全正确。你可以测试上面的几个例子。现在问题是为什么坚持regeres哪里有实现工作? – Matteo

145

之前,这里是适用于Java的兼容RFC822正则表达式:

Pattern ptr = Pattern.compile("(?:(?:\\r\\n)?[ \\t])*(?:(?:(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*))*@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*|(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*)*\\<(?:(?:\\r\\n)?[ \\t])*(?:@(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*(?:,@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*)*:(?:(?:\\r\\n)?[ \\t])*)?(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*))*@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*\\>(?:(?:\\r\\n)?[ \\t])*)|(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*)*:(?:(?:\\r\\n)?[ \\t])*(?:(?:(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*))*@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*|(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*)*\\<(?:(?:\\r\\n)?[ \\t])*(?:@(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*(?:,@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*)*:(?:(?:\\r\\n)?[ \\t])*)?(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*))*@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*\\>(?:(?:\\r\\n)?[ \\t])*)(?:,\\s*(?:(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*))*@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*|(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*)*\\<(?:(?:\\r\\n)?[ \\t])*(?:@(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*(?:,@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*)*:(?:(?:\\r\\n)?[ \\t])*)?(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\"(?:[^\\\"\\r\\\\]|\\\\.|(?:(?:\\r\\n)?[ \\t]))*\"(?:(?:\\r\\n)?[ \\t])*))*@(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*)(?:\\.(?:(?:\\r\\n)?[ \\t])*(?:[^()<>@,;:\\\\\".\\[\\] \\000-\\031]+(?:(?:(?:\\r\\n)?[ \\t])+|\\Z|(?=[\\[\"()<>@,;:\\\\\".\\[\\]]))|\\[([^\\[\\]\\r\\\\]|\\\\.)*\\](?:(?:\\r\\n)?[ \\t])*))*\\>(?:(?:\\r\\n)?[ \\t])*))*)?;\\s*)"); 
String[] emails = { "\"Fred Bloggs\"@example.com", "[email protected]", "Chuck Norris <[email protected]>", "[email protected]üller.de", "[email protected]" }; 
for (String email : emails) { 
    System.out.println(email + " is " + (ptr.matcher(email).matches() ? "valid" : "invalid")); 
} 

输出:

"Fred Bloggs"@example.com is valid 
[email protected] is invalid 
Chuck Norris <[email protected]> is valid 
[email protected]üller.de is valid 
[email protected] is valid 

正则表达式是从这个帖子采取:Mail::RFC822::Address: regexp-based address validation。结果应该与online version一致。

+7

downvoting的原因是什么?这个正则表达式真的有用! – ejboy

+1

我认为他降级了,因为必须手动转义特殊字符,如“编译前。除非会出现语法错误。 –

+2

好吧,我已经做了一个工作的Java示例 – ejboy

1

您可以使用此方法验证java中的电子邮件地址。

public class EmailValidator { 
    private Pattern pattern; 
    private Matcher matcher; 

    private static final String EMAIL_PATTERN = 
     "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" 
     + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; 

    public EmailValidator() { 
     pattern = Pattern.compile(EMAIL_PATTERN); 
    } 

    /** 
    * Validate hex with regular expression 
    * 
    * @param hex 
    *   hex for validation 
    * @return true valid hex, false invalid hex 
    */ 
    public boolean validate(final String hex) { 

    matcher = pattern.matcher(hex); 
    return matcher.matches(); 

    } 
} 
0

正则表达式:^[\\w!#$%&’*+/=? {|}〜^ - ] +(:\ [\ W#$%&“* +/=?!?{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$

public static boolean isValidEmailId(String email) { 
     String emailPattern = "^[\\w!#$%&’*+/=?`{|}~^-]+(?:\\.[\\w!#$%&’*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$"; 
     Pattern p = Pattern.compile(emailPattern); 
     Matcher m = p.matcher(email); 
     return m.matches(); 
    } 
0

如果你想允许非延长字符,这对我来说工作得很好。

"^[\\p{L}\\p{N}\\._%+-][email protected][\\p{L}\\p{N}\\.\\-]+\\.[\\p{L}]{2,}$" 

它不IP的允许@但在从[email protected]可以用它来验证最有效的电子邮件后。 \p{L}验证UTF-Letters并且\p{N}验证UTF-Numbers。您可以检查this doc了解更多信息。

1

通用的电子邮件格式的正则表达式: -

String regexEmail = "^[A-Za-z](.*)([@]{1})(.{1,})(\\.)(.{1,})"; 
1

通用电子邮件格式(RE),其中还包括像co.in,co.uk域名,COM,outlook.com等

而治之说即:

  • 大写和小写英文字母(az,AZ)
  • 数字0到9
  • 人物! #$%&'* + -/=?^_`{| }〜字符。
  • (点号,句号,句号),前提是它不是第一个或最后一个 字符,并且还规定它不会连续出现两个或更多个 次。

    [a-zA-Z0-9]+[._a-zA-Z0-9!#$%&'*+-/=?^_`{|}~]*[a-zA-Z]*@[a-zA-Z0-9]{2,8}.[a-zA-Z.]{2,6} 
    
3

彼此简单的替代验证电子邮件

public static final String EMAIL_VERIFICATION = "^([\\w-\\.]+){1,64}@([\\w&&[^_]]+){2,255}.[a-z]{2,}$"; 
-1

的99%试试这个

String regex = "^[\\p{L}\\p{N}\\._%+-][email protected][\\p{L}\\p{N}\\.\\-]+\\.[\\p{L}]{2,}$"; 
Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher(Email); 
if (matcher.matches()) { 
    //your Logic 
} 
+0

代码只有答案arent鼓励,因为他们不要为未来的读者提供很多信息,请提供一些解释给你写的东西 – WhatsThePoint

+0

我根本不认为任何具有一定经验的编程人员都需要对我写的内容做任何解释。 –

0

正则表达式类似Facebook的验证:

public static final String REGEX_EMAIL_VALIDATION = "^[\\w-\\+]+(\\.[\\w]+)*@[\\w-]+(\\.[\\w]+)*(\\.[a-zA-Z]{2,})$"; 

DTO单元测试(与龙目岛):

@Data 
@Accessors(chain = true) 
@FieldDefaults(level = AccessLevel.PRIVATE) 
public class UserCreateDto { 

    @NotNull 
    @Pattern(regexp = REGEX_EMAIL_VALIDATION) 
    @Size(min = 1, max = 254) 
    String email; 
} 

有效/无效的电子邮件以下单元测试:

public class UserCreateValidationDtoTest { 

private static final String[] VALID_EMAILS = new String[]{"[email protected]", "[email protected]", 
     "[email protected]", "[email protected]", "[email protected]", 
     "[email protected]", "[email protected]", "[email protected]", 
     "[email protected]", "[email protected]", "[email protected]"}; 
private static final String[] INVALID_EMAILS = new String[]{"あいうえお@example.com", "[email protected]", 
     "email", "[email protected]", "[email protected]", "[email protected]", "[email protected]", 
     "[email protected]", "email()*@gmAil.com", "eEmail()*@gmail.com", "[email protected]%*.com", "[email protected]", 
     "[email protected]", "[email protected]@gmail.com", "[email protected]"}; 
private Validator validator; 

@Before 
public void setUp() throws Exception { 
    ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
    validator = factory.getValidator(); 
} 

@Test 
public void emailValidationShouldBeValid() throws Exception { 
    Arrays.stream(VALID_EMAILS) 
      .forEach(email -> { 
         Set<ConstraintViolation<UserCreateDto>> violations = validateEmail(
           new UserCreateDto().setEmail(email)); 
         System.out.println("Email: " + email + ", violations: " + violations); 
         Assert.assertTrue(violations.isEmpty()); 
        } 
      ); 
} 

@Test 
public void emailValidationShouldBeNotValid() throws Exception { 
    Arrays.stream(INVALID_EMAILS) 
      .forEach(email -> { 
         Set<ConstraintViolation<UserCreateDto>> violations = validateEmail(
           new UserCreateDto().setEmail(email)); 
         System.out.println("Email: " + email + ", violations: " + violations); 
         Assert.assertTrue(!violations.isEmpty()); 
        } 
      ); 
} 


private Set<ConstraintViolation<UserCreateDto>> validateEmail(UserCreateDto user) { 
    String emailFieldName = "email"; 
    return validator.validateProperty(user, emailFieldName); 
} 

}

0

尝试使用电子邮件下面的代码是

格式

[email protected]

第一部分-jsmith第二部分 - @exa mple.com

  1. 在1份它将允许0-9,AZ,点号(。),下划线符号(_)
  2. 在2部分它将允许AZ,必须@和。

    ^[a-zA-Z0-9 _。] + @ [a-zA-Z。] + ?.[a-zA-Z] {2,3} $

0

这是验证电子邮件的有效正则表达式。它完全符合RFC822并接受IP地址和服务器名称(用于Intranet目的)。

public static boolean isEmailValid(String email) { 
    final Pattern EMAIL_REGEX = Pattern.compile("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", Pattern.CASE_INSENSITIVE); 
    return EMAIL_REGEX.matcher(email).matches(); 
} 

下面是一些输出示例,当你调用isEmailValid(emailVariable)

与正则表达式
[email protected] // valid 
[email protected] // valid 
[email protected] // valid (with +label - Gmail accepts it!) 
[email protected] // valid (with IP addresses) 
[email protected] // valid (with +label and IP address) 
[email protected] // valid (with no first domain level) 
[email protected] // valid (case insensitive) 
@someserver // invalid 
@someserver.com // invalid 
[email protected] // invalid 
[email protected] // invalid 
相关问题