2017-07-28 43 views
2

我開發的電子郵件驗證Android應用程序,爲此我使用正則表達式,其連接如下:正則表達式拋出ANR在Android

它可以在一定條件下,但一定條件下,它給了我App Not Responding錯誤。

例如,如果我把一些特定長度的文本,但沒有@,那麼它給了我ANR。如果我的電子郵件長度低於這個範圍,它會給我適當的驗證錯誤。我的正則表達式如下:

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

// Here it gives proper validation error for fgefjkbgjerk.com but gives ANR 
    for 
    sjkfghhrghergfhfgfghkfgkfgkjkgergejkgrjekfghfghfg.com 

public static boolean checkEmailValidations(String regex,String email){ 
    boolean patternStatus=false; 
    Pattern pattern= Pattern.compile(regex); 
    Matcher matcher = pattern.matcher(email); 
    if(matcher.matches()){ 
     patternStatus=false; 
    }else{ 
     patternStatus=true; 
    } 
    return patternStatus; 
} 

是否存在與正則表達式或我的實現有問題?

+0

當你ANR,那麼你的logcat的堆棧跟蹤說呢? –

+0

你的圖案看起來不對。在https://regex101.com檢查並驗證您的正則表達式 –

+0

是的,我檢查了它。根據建議,它應該是這樣的[(?:[A-Za-z0-9!#$%&'* + - \/=?^ _'{|}〜。] *)+(\\ w [ A-ZA-Z0-9#$%&'* + - \/=^_'{|}〜] +)@(:![A-ZA-Z0-9 - ] *)'?。?。我也試過這個。但結果相同。 – nilkash

回答

0

我相信你應該使用這樣的模式:

public static final Pattern EMAIL_PATTERN = 
Pattern.compile("^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE); 

而且如果你不知道你的匹配器,我總是用這個模式:如果你只是想

public static boolean checkEmailValidations(String email) { 
      Matcher matcher = EMAIL_PATTERN .matcher(email); 
      return matcher.find(); 
} 
+1

嗨同樣感謝您快速重播。我有一些額外的要求允許某些字符,並避免一些字符。這是我修改了我的正則表達式的原因。 – nilkash

1

驗證電子郵件可以使用Android模式

private boolean isValidEmail(String email) { 
    Pattern pattern = Patterns.EMAIL_ADDRESS; 
    return pattern.matcher(email).matches(); 
} 

他們使用的模式是 -

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}" + 
      ")+" 
     ); 

所以你可以根據你的需要修改它。

參考hereAndroid email pattern

相關問題