2015-10-28 19 views
-1

我想驗證通過edittext輸入的電子郵件地址。我已經看過使用Pattern的一般電子郵件驗證,但我有一個有效的電子郵件域的Arraylist。我只想從這個域列表中驗證電子郵件地址。僅從域列表中驗證電子郵件

我試了很多,但無法使它工作。請幫助:)

目前代碼:

public boolean isEmailValid(String email) { 
    String regExpn = "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@" 
      + "\\.(abc.com|abc.co|abc.nz|abc.org)$"; 

    Pattern pattern = Pattern.compile(regExpn, Pattern.CASE_INSENSITIVE); 
    Matcher matcher = pattern.matcher(email); 

    return matcher.matches(); 
} 

感謝

普通電子郵件驗證原正則表達式:

String regExpn = "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@" 
      + "((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?" 
      + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\." 
      + "([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?" 
      + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|" 
      + "([a-zA-Z]+[\\w-]+\\.)+[a-zA-Z]{2,4})$"; 
+0

你可以發佈你試過嗎? –

+0

@JaredRummler嗨,我已經更新了這個問題。請檢查 –

回答

1

嘗試

(abc\\.com|abc\\.co|abc\\.nz|abc\\.org) 

代替

\\.(abc.com|abc.co|abc.nz|abc.org) 

\。是指字面上的一個點而不是「每個字符」。 \\。 Java需要逃避反斜槓才能獲得\。作爲正則表達式。

編輯:刪除\\。在前面和逃避域點就足夠了,正則表達式和樣品更新:

String regExpn = "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@" 
      + "(abc\\.com|abc\\.co|abc\\.nz|abc\\.org)$"; 

所以

 System.out.println(isEmailValid("[email protected]")); 
     System.out.println(isEmailValid("[email protected]")); 
     System.out.println(isEmailValid("[email protected]")); 
     System.out.println(isEmailValid("[email protected]")); 
     System.out.println(isEmailValid("[email protected]")); 

帶來

false 
true 
true 
true 
false 
+0

嗨,感謝您的幫助,但它仍然不起作用 –

+0

@iitum studant什麼是行不通的?你能提供你正在使用的測試方法嗎?我只是看看域的東西,而不是正則表達式,我明白你在其他地方找到了。在將它擴展到域名列表之前,該正則表達式是否工作正常? – yasd

+0

嗨,我已經更新了原來的正則表達式,我用來驗證一般的電子郵件地址,它的工作完美的問題。對於修改後的版本,我使用了[email protected],但它不起作用 –