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


当前回答

我强烈建议你不要尝试“验证”电子邮件地址,你只会让自己陷入很多工作没有好的理由。

只是要确保输入的内容不会破坏你自己的代码——例如,没有空格或可能导致异常的非法字符。

其他任何事情只会让你付出大量的工作,回报却微乎其微……

其他回答

下一个模式用于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();
}

我已经使用以下代码。这很有效。我希望这对你有所帮助。

if (validMail(yourEmailString)){
   //do your stuf
 }else{
 //email is not valid.
}

并使用以下方法。如果电子邮件有效,则返回true。

    private boolean validMail(String yourEmailString) {
    Pattern emailPattern = Pattern.compile(".+@.+\\.[a-z]+");
    Matcher emailMatcher = emailPattern.matcher(emailstring);
    return emailMatcher.matches();
}

试试这个简单的方法,它不能接受以数字开头的电子邮件地址:

boolean checkEmailCorrect(String Email) {
    if(signupEmail.length() == 0) {
        return false;
    }

    String pttn = "^\\D.+@.+\\.[a-z]+";
    Pattern p = Pattern.compile(pttn);
    Matcher m = p.matcher(Email);

    if(m.matches()) {
        return true;
    }

    return false;
}

我强烈建议你不要尝试“验证”电子邮件地址,你只会让自己陷入很多工作没有好的理由。

只是要确保输入的内容不会破坏你自己的代码——例如,没有空格或可能导致异常的非法字符。

其他任何事情只会让你付出大量的工作,回报却微乎其微……

你也可以用

InternetAddress emailAddr = new InternetAddress(email);
emailAddr.validate();

如果邮件无效,它将抛出一个AddressException异常。

不幸的是,Android不支持jndi-dns,但是为了让你了解更强大的电子邮件验证,你可以使用它来验证电子邮件域。也许安卓专家可以帮忙,并展示是否有类似的替代品……这里提供了一个使用“常规”java的示例实现。

EDIT

我刚意识到javax。邮件也不支持…但这篇文章展示了一个变通方法。