如何使用正则表达式来检测Android中的电子邮件地址的正确模式

如何使用正则表达式来检测Android中的电子邮件地址的正确模式

问题描述:

我正在android中制作用户登录应用程序。注册部分使用正确的电子邮件地址模式,我使用的是正则表达式。它工作正常,但主要问题是我可以登录,[email protected],但我只想要(的Gmail,Hotmail服务,雅虎& rediffmail)不是123或ABC etc.How我能做些this.My代码如何使用正则表达式来检测Android中的电子邮件地址的正确模式

public static boolean isEmailValid(String email,EditText et) { 
     boolean isValid = false; 

     String expression = "^[\\w\\.-][email protected]([\\w\\-]+\\.)+[A-Z]{2,4}$"; 
     CharSequence inputStr = email; 

     Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE); 
     Matcher matcher = pattern.matcher(inputStr); 
     if (matcher.matches()) { 
      isValid = true; 
     }else{ 
      et.setError(Html.fromHtml("<font color='#000'>Plese type valid Email Address</font>")); 
     } 
     return isValid; 
    } 

plz帮助我。

+0

您需要将解决问题的答案标记为已解决。 –

+0

@MehdiB。你的sol无法解决我给出的问题(Lang无法解决)错误。 –

https://developer.android.com/reference/android/util/Patterns.html中使用预定义的EMAIL_ADDRESS模式。

+0

我认为这是一个非常好的主意。也许使用预定义的模式来确认“这是一个有效的电子邮件地址”,然后执行额外的测试来执行业务规则“电子邮件地址位于gmail.com,hotmail.com,yahoo.com,rediff.com等”。 –

我认为这是更好地让从任何逻辑去耦验证(错误显示,观点等):

创建一个接口:ValidationCallback.java

public interface ValidationCallback { 
    void onEval (boolean isValid); 
} 

然后一个实用工具类,其中所有的验证规则会去(ISNUMERIC是....):Lang.java

public class Lang { 

    private final static Set<String> Providers; 
    static { 
     Providers = new HashSet<String>(); 
     Providers.add ("gmail"); 
     Providers.add ("yahoo"); 
     Providers.add ("outlook"); 
    } 

    public static void checkEmailValidity (String input, ValidationCallback callback) { 
     if (callback != null) { 
      callback.onEval (isEmailValid (input)); 
     } 
    } 

    public static boolean isEmailValid (String input) { 
     String emailExp = "[a-zA-Z0-9][a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{0,255}\\@[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}(\\.[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25})+"; 
     Pattern pattern = Pattern.compile (emailExp); 
     boolean isValid = pattern.matcher (input).matches(); 

     if (isValid) { 
      String provider = input.split ("@")[1].split (".")[0].toLowerCase(); 
      if (!Providers.contains (provider)) { 
       isValid = false; 
      } 
     } 

     return isValid; 
    } 
} 
从您的活动或有另外一个实用工具类

然后:

ValidationCallback callback = new ValidationCallback() { 

    @Override 
    public void onEval (boolean isValid) { 
     if (!isValid) { 
      editText.setError(Html.fromHtml("<font color='#000'>Plese type valid Email Address</font>")); 
     } 
    } 
} 
Lang.checkEmailValidity (editText.getText(), callback); 

或者,如果你不想使用回拨机制:

if (!Lang.isEmailValid (editText.getText())) { 
    editText.setError(Html.fromHtml("<font color='#000'>Plese type valid Email Address</font>")); 
} 

你得到的图片,你可以调整你想要的东西。

+0

先生它显示下面的那个郎(不能解决).Plz告诉我如何解决这个问题 –

+0

@NickyManali:你需要创建它......用上面的代码创建一个类'Lang.java'并创建一个接口'ValidationCallback.java' .. –