2012-04-25 28 views
2

我想檢查一個at字符是否只存在於android編輯視圖中。我對正則表達式很陌生,我實現了即將到來的代碼。我在哪裏弄錯了?這裏是我的代碼正則表達式Android

try { 

     Pattern pattern = Pattern.compile("/@"); 
     Matcher matcher = pattern.matcher(valEmail); 

     if (!matcher.matches()) { 

      Toast.makeText(this," Invid no @ character ",Toast.LENGTH_LONG).show(); 

     } 

    }catch(Exception ex){} 
+0

你有哪些寫正則表達式,我認爲你想要的電子郵件? – Herry 2012-04-25 06:12:51

+0

我想檢查是否只有一個@字符出現在電子郵件地址使用正則表達式 – user1355385 2012-04-25 06:15:46

+0

如果你想正則表達式的電子郵件檢查我的答案。 – Herry 2012-04-25 06:16:42

回答

6

有兩個問題與您當前的代碼:

  • 的斜線意味着它真的是在尋找「/ @」,而不僅僅是「@」。你似乎認爲「/」在正則表達式中做了一些特殊的事情 - 事實並非如此。
  • 您正在使用matches(),它試圖匹配輸入的整個;你想find這將只是試圖找到匹配的正則表達式某處在輸入。

爲什麼你使用正則表達式?爲什麼不乾脆:

if (!valEmail.contains("@")) { 
    ... 
} 

,將檢查該地址是否包含任何「@」標誌。如果要檢查是否有隻有一個「@」符號,你可以使用:

int atIndex = valEmail.indexOf('@'); 
if (atIndex == -1) { 
    // Handling for *no* @ sign 
} 
if (valEmail.indexOf('@', atIndex + 1) != -1) { 
    // Handling for multiple @ signs 
} 

如果要使用正則表達式,也有可用的,而更復雜的電子郵件地址驗證的正則表達式。 (有很多不同的有效性的不同水平 - 確保你得到一個爲正則表達式的Java風格設計的。)我不會使用一個只是這個 - 但只使用正則表達式,你真的感興趣模式匹配。

如果你想使用正則表達式「至少一種非@,@由以下,隨後至少一種非@」你可以使用:

// TODO: Compile this once and reuse 
Pattern pattern = Pattern.compile("[^@][email protected][^@]+"); 
Matcher matcher = pattern.matcher(valEmail); 

if (!matcher.matches()) { 
    ... 
} 

順便說一句,這一點:

catch(Exception ex){} 

從未一個好主意。請不要盲目忽略錯誤。

+0

正則表達式是快速和減少代碼長度的兄弟。 – user1355385 2012-04-25 06:18:49

+1

您的代碼非常短,而且非常不正確。先把它做好。我也不會認爲正則表達式是表現的頂峯。 – StilesCrisis 2012-04-25 06:21:38

+1

@ user135538​​5:編譯一個正則表達式,然後使用它*不會比'text.contains(「@」)'更快(或更短)。正如StilesCrisis所說 - 在擔心性能之前先讓你的代碼*工作*。 – 2012-04-25 06:23:52

1

你有領先於正則表達式不應該存在/

此外,您應該使用find而不是matches

+0

這/打算檢查是否只有一個@字符存在。我爲什麼要刪除它? – user1355385 2012-04-25 06:17:19

+0

@ user135538​​5:你爲什麼會這麼做? – 2012-04-25 06:19:03

+0

'/'不這樣做。 – StilesCrisis 2012-04-25 06:20:26

0

只需使用@而不需要/開頭。

1

matches()方法檢查整個字符串是否與正則表達式匹配。您應該使用find()方法而不是匹配。並且/字符不應該在那裏。
但不是所有這些,你最好使用字符串的方法。 if(valEmail.contains("@"))

2

對於電子郵件,您可以使用Below Regular Expression。

private static final String EMAIL_PATTERN = "^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"; 



    try { 

    Pattern pattern = Pattern.compile(EMAIL_PATTERN); 
    Matcher matcher = pattern.matcher(valEmail); 

    if (!matcher.matches()) { 

     Toast.makeText(this," Invid no @ character ",Toast.LENGTH_LONG).show(); 

    } 

}catch(Exception ex){ 
}