2011-11-20 186 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 
相關問題