在Android中验证电子邮件地址(例如从用户输入字段)的好技术是什么?emailvalidator似乎不可用。还有其他库做这个,包括在Android已经或我必须使用RegExp?


当前回答

另一种选择是从API级别8开始的内置模式:

public final static boolean isValidEmail(CharSequence target) {
  if (TextUtils.isEmpty(target)) {
    return false;
  } else {
    return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
  }
}

模式可见源

OR

来自@AdamvandenHoven的一句话解决方案:

public final static boolean isValidEmail(CharSequence target) {
  return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}

其他回答

这里的关键是要完全验证电子邮件地址。你不只是想检查它的语法正确性,你想检查电子邮件地址是否真实。

两个明显的原因:真正的用户经常输入错误的电子邮件地址,一些用户可能会输入假的电子邮件地址。因此,您需要进行语法检查和存在性检查。

我在Android上发现的最好的方法是使用免费的Cloudmersive Validation API。

代码如下所示:

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");

EmailApi apiInstance = new EmailApi();
String email = "email_example"; // String | Email address to validate, e.g. \"support@cloudmersive.com\". The input is a string so be sure to enclose it in double-quotes.
try {
    FullEmailValidationResponse result = apiInstance.emailFullValidation(email);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling EmailApi#emailFullValidation");
    e.printStackTrace();
}

我在我所有的应用程序中都使用了这个功能,它很棒,因为我可以在登录时在UX中验证电子邮件地址。

对于电子邮件验证,android提供了一些内置模式。但它只支持API级别8及以上。

下面是使用该模式检查电子邮件验证的代码。

  private boolean Email_Validate(String email) 
  {
    return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
  }

确保执行此方法后,您应该检查,如果此方法返回真,那么您允许保存电子邮件,如果此方法返回假,则显示电子邮件是“无效”的消息。

希望你能得到答案, 谢谢你。

下一个模式用于K-9邮件:

public static final Pattern EMAIL_ADDRESS_PATTERN = 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}" +
          ")+"
      );

你可以使用函数

private boolean checkEmail(String email) {
        return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
}

使用扩展函数的最简单的Kotlin解决方案:

fun String.isEmailValid() =
            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}" +
                            ")+"
            ).matcher(this).matches()

然后你可以这样验证:

"testemail6589@gmail.com".isEmailValid()

如果你在kotlin-multiplatform中没有访问Pattern,这是等价的:

fun String.isValidEmail() = Regex(emailRegexStr).matches(this)

另一种选择是从API级别8开始的内置模式:

public final static boolean isValidEmail(CharSequence target) {
  if (TextUtils.isEmpty(target)) {
    return false;
  } else {
    return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
  }
}

模式可见源

OR

来自@AdamvandenHoven的一句话解决方案:

public final static boolean isValidEmail(CharSequence target) {
  return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}