2017-02-28 106 views
1

我有正則表達式的問題。不知何故,在線regextester不符合該模式。春季驗證java模式多郵件

我想允許

[email protected] 

[email protected];[email protected];[email protected] 

這樣一個沒有分號,多用之間的分號,但不是最終

我有:

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); 
} 

public boolean valid(final String email) { 

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

} 

回答

1

剛取圖案的錨作爲電子郵件匹配子模式之間,並用它來建立最終的模式:

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

您的圖案看起來像the one here

  • ^ - 將斷言串
  • SINGLE_EMAIL_PATTERN的開始 - 將
  • (?:;<SINGLE_EMAIL_PATTERN>)*匹配1個電子郵件 - 將匹配的0個或更多序列:
    • ; - 一個;
    • <SINGLE_EMAIL_PATTERN> - 一封電子郵件
  • $ - 將斷言字符串的結尾。
+0

THX,它工作正常,看起來不錯。 與測試: [email protected]:真\t \t [email protected]; [email protected]; [email protected]:真 \t \t [email protected]; [email protected]; mymail3 @ whatever.com;:false [email protected];:false – w3Charlie

1

看看這個對你的作品:

@Test 
public void testValidEmail(){ 
     String regex = 
        "(([A-Za-z0-9_\\-\\.])+\\@([A-Za-z0-9_\\-\\.])+\\.([A-Za-z]{2,4}))(((;|,|; | ;| ; | , | ,){1}" 
        +"([A-Za-z0-9_\\-\\.])+\\@([A-Za-z0-9_\\-\\.])+\\.([A-Za-z]{2,4}))*)"; 
     Boolean matches = Pattern.matches(regex, "[email protected];[email protected];[email protected]"); 
     Assert.assertTrue(matches); 
}