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

时间:2016-10-03 16:35:25

标签: android regex

我正在android.In注册部分制作一个用户登录应用程序,使用正确的电子邮件地址模式,我正在使用正则表达式。它工作正常,但主要问题是我可以登录xyz@123.com但我想要只有(gmail,hotmail,yahoo& rediffmail)不是123或abc等。我怎么能这样做。我的代码是

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

        String expression = "^[\\w\\.-]+@([\\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;
    }

请帮助我。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

我认为最好让验证与任何逻辑分离(错误显示,视图等......):

创建一个接口:ValidationCallback.java

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

然后是一个Utility类,其中所有验证规则都将去(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;
    }
}

然后从您的Activity或具有该视图的另一个Utility类:

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

你得到了照片,你可以根据需要进行调整。