2011-04-15 37 views
1

我正在嘗試查找一個簡單的方法來檢查用戶的輸入是否符合電子郵件地址的幾個條件。我已閱讀了關於此主題的許多主題,並且大多數人似乎也想驗證電子郵件地址。我並沒有試圖建立一些超級電子郵件地址驗證器/檢查器。我試圖建立一個檢查這些東西的方法:對Java中電子郵件的非混淆性簡單驗證字符串

  1. 用戶輸入的字符串包含'@'符號。
  2. '@'符號前至少有兩個字符。
  3. 有一個'。'在符號後面只有三個字符。域名可以根據需要儘可能長,但字符串必須以「._ _ _」結尾。如「.com」或「.net」...

據我所知,這不是一個包羅萬象的電子郵件地址檢查器。這不是我想要的。我只想要一件簡單的事情。我知道這可能是一個例行的問題,但即使在閱讀了驗證電子郵件地址的所有嚴重瘋狂的方法之後,我也無法弄清楚。

這是我到目前爲止的代碼:(別擔心,我已經知道這是很可悲的....)

public static void checkEmail() 
{ 
    validEmail(emailAddresses); 
    if(validEmail(emailAddresses)) 
    { 

    } 
} 

public static boolean validEmail(String email) { 
    return email.matches("[A-Z0-9._%+-][A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{3}"); 
} 
+0

在這種情況下很難說什麼是簡單的。您發佈了一些案例(包含@,之前/之後包含另一個字符)。我會閱讀規範並制定一個完整的正則表達式來驗證它。 – khachik 2011-04-15 20:10:08

+0

只需注意術語:您不想檢查電子郵件,想檢查*電子郵件地址*。這是不一樣的。 – 2011-04-15 20:34:59

+0

另一個說明:有頂級域名有更多('博物館,''航空'),並且少於兩個('de','us'等 - 所有國家代碼頂級域名,事實上)字母。 (而且我的大部分電子郵件地址都以'.de'結尾。) – 2011-04-15 20:39:15

回答

2

不完美,但完成工作。

static boolean validEmail(String email) { 
    // editing to make requirements listed 
    // return email.matches("[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,4}"); 
    return email.matches("[A-Z0-9._%+-][A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{3}"); 
} 

void checkEmails() { 
    for(String email : emailAddresses) { 
     if(validEmail(email)) { 
      // it's a good email - do something good with it 
     } 
     else { 
      // it's a bad email - do something... bad to it? sounds dirty... 
     } 
    } 
} 
+0

也許你可以加小寫? – rocky3000 2011-04-15 20:15:30

+0

我可以。我可以添加很多東西。將每個'A-Z'改變爲'A-Za-Z'(可能是我不知道的一些快捷方式可以做得更好),這會很容易。但是,OP想要簡單而簡單。 – corsiKa 2011-04-15 20:17:53

+0

@glowcoder感謝您的幫助。我試圖理解布爾代碼的email.matches部分,我對如何將它合併到我的代碼中有點困惑。我已經將布爾代碼作爲單獨的方法輸入到我的代碼中。現在我正在嘗試編寫「if」語句。我編輯了原始問題。 – Michael 2011-04-15 20:34:13

12

javax.mail包提供了一個類只是這樣的:InternetAddress。使用this constructor可讓您執行RFC822合規性。

+1

不得不承認我比我更喜歡這個。 – corsiKa 2011-04-15 20:10:50

0
int indexOfAt = email.indexOf('@'); 
// first check : 
if (indexOfAt < 0) { 
    // error 
} 

// second check : 
if (indexOfAt < 2) { 
    // error 
} 

// third check : 
int indexOfLastDot = email.lastIndexOf('.'); 
if (indexOfLastDot < indexOfAt || indexOfLastDot != (email.length() - 4)) { 
    // error 
} 

http://download.oracle.com/javase/6/docs/api/java/lang/String.html爲String方法的文檔。

+0

這允許不符合的'test @ foo @ bar.com'。它也不適用於不允許的字符,比如',<> \''等等。 – corsiKa 2011-04-15 20:19:42