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


当前回答

这是android.util.Patterns.EMAIL_ADDRESS

(a-zA-Z0-9 + ._ \ % - +) {1256} \ @ [a-zA-Z0-9] [a-zA-Z0-9 -]{0, 64}(。[a-zA-Z0-9] [a-zA-Z0-9 -] {0,25}) +

字符串将匹配它,如果

Start by 1->256 character in (a-z, A-Z, 0-9, +, ., _, %, - , +)  
then 1 '@' character  
then 1 character in (a-z, A-Z, 0-9)  
then 0->64 character in (a-z, A-Z, 0-9, -)  
then **ONE OR MORE** 
         1 '.' character   
    then 1 character in (a-z, A-Z, 0-9)   
    then 0->25 character in (a-z, A-Z, 0-9, -)

例如一些特殊匹配的电子邮件

a@b.c
a+@b-.c
a@b.c.d.e.f.g.h

您可以根据自己的情况修改此模式,然后通过

fun isValidEmail(email: String): Boolean {
    return Patterns.EMAIL_ADDRESS.matcher(email).matches()
}

其他回答

你也可以用

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

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

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

EDIT

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

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

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

你可以通过oval.jar文件在android中进行任何类型的验证。OVal是一种实用的、可扩展的通用验证框架,适用于任何类型的Java对象。

点击这个链接:http://oval.sourceforge.net/userguide.html

你可以从这里下载:http://oval.sourceforge.net/userguide.html#download

您可以通过在变量中设置标记来使用验证

public class Something{

    @NotEmpty  //not empty validation
    @Email     //email validation
    @SerializedName("emailAddress")
    private String emailAddress;
}

   private void checkValidation() {
        Something forgotpass.setEmailAddress(LoginActivity.this.dialog_email.getText().toString());
        Validator validator = new Validator();
        //collect the constraint violations
        List<ConstraintViolation> violations = validator.validate(forgotpass);
        if(violations.size()>0){
            for (ConstraintViolation cv : violations){
                if(cv.getMessage().contains("emailAddress")){
                    dialog_email.setError(ValidationMessage.formattedError(cv.getMessage(), forgotpass));
                }
            }
        }
}

试试这段代码..它真的有效。

            if (!email
                    .matches("^[\\w-_\\.+]*[\\w-_\\.]\\@([\\w]+\\.)+[\\w]+[\\w]$"))
            {
                Toast.makeText(getApplicationContext(), "Email is invalid",
                        Toast.LENGTH_LONG).show();
                return;
            }