2013-05-14 97 views
1

今天我們體驗到了奇怪的模式行爲。Android android.util.Patterns.EMAIL_ADDRESS奇怪的行爲

例如,在具有3.2 stock ROM(以前爲4.0 +)的平板電腦上運行良好。

但在其他一些3.2平板電腦和4.0設備上沒有。

功能測試電子郵件功能是這樣的:

public static boolean checkEmail(CharSequence emailAddress){ 
    if(Build.VERSION.SDK_INT >= 8){ 
     return android.util.Patterns.EMAIL_ADDRESS.matcher(emailAddress).matches(); 
    } 
    .... 

所以這是我在16'th來源電子郵件ADDRES模式(JAVA代碼):

public static final Pattern EMAIL_ADDRESS 
    = Pattern.compile(
     "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" + 
     "\\@" + 
     "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" + 
     "(" + 
      "\\." + 
      "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" + 
     ")+" 
    ); 

這裏是「規範化「版本:

[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}\\@[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}(\\.[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25})+ 

RegexpalJS正則表達式驗證程序)告訴說,這個正則表達式大多是正確的,但在圓括號\\.應0123'和\\@應該是\@正常工作在正則表達式。

此外,還不十分清楚,爲什麼第一個大括號中有兩個'\ +'符號組?

+0

我的猜測中使用正則表達式的味道是不能跨越不同的平臺相同。 – Stephan 2013-05-14 14:36:29

回答

1

我們目前的解決方案,它的工作:

[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}[\\@]{1}[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}([\\.]{1}[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25})+ 
1

使用Pattern.pattern()函數從工作的設備獲取模式的值,並使其自己的Pattern對象不在其中。這樣你就不會在各種設備上實現差異。 Geocoder也是如此,這在某些設備上不適用於我。

+0

最佳答案!! (api 8) – 2014-07-21 18:48:24