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


当前回答

你可以这样写一个Kotlin扩展:

fun String.isValidEmail() =
        isNotEmpty() && android.util.Patterns.EMAIL_ADDRESS.matcher(this).matches()

然后像这样调用它:

email.isValidEmail()

其他回答

你可以通过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));
                }
            }
        }
}

不要使用reg-ex。

显然,下面是一个正确验证符合RFC 2822的大多数电子邮件地址的reg-ex,(对于“user@gmail.com.nospam”这样的地址仍然会失败,org.apache.commons.validator. emailvalidator也是如此)

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

验证电子邮件最简单的方法可能是向提供的地址发送确认电子邮件,如果它反弹,那么它是无效的。

如果你想执行一些基本的检查,你可以检查它的形式是*@*

如果你有一些业务逻辑特定的验证,那么你可以使用正则表达式来执行,例如必须是gmail.com帐户或其他东西。

你可以这样写一个Kotlin扩展:

fun String.isValidEmail() =
        isNotEmpty() && android.util.Patterns.EMAIL_ADDRESS.matcher(this).matches()

然后像这样调用它:

email.isValidEmail()

这是kotlin使用扩展函数的最佳方式

fun String.isEmailValid(): Boolean {
        return !TextUtils.isEmpty(this) && android.util.Patterns.EMAIL_ADDRESS.matcher(this).matches()
    }

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

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

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