【问题标题】:How do you make a field an email field not required in Android Saripaar?如何使字段成为 Android Saripaar 中不需要的电子邮件字段?
【发布时间】:2015-08-26 20:31:46
【问题描述】:

我的 Android 应用中有一个简单的表单,我正在使用 Android Saripaar 进行验证,其中一个字段是电子邮件地址,根据the first example in the docs,它应该看起来像这样:

@NotEmpty
@Email
private EditText emailEditText;

但是我希望它是一个可选字段,所以我省略了@NotEmpty 注释:

@Email
private EditText emailEditText;

但是当我将其留空时,它可以理解地将其标记为无效的电子邮件地址。是否可以在不编写自定义规则的情况下将此字段设为可选?

【问题讨论】:

  • 看起来这实际上是 GitHub 存储库上的 open issue
  • 会在有解决方案时回答。
  • 非常感谢!顺便说一句,Saripaar 是一个很棒的工具
  • 很高兴你喜欢它:)

标签: android saripaar


【解决方案1】:

由于我们需要一个项目的可选电子邮件字段,因此我继续并根据this answer 进行了规则/注释组合。 RulesAnnotations 参考 Saripaar 文档。

OptionalEmailRule.java

public class OptionalEmailRule extends AnnotationRule<OptionalEmail, String> {

    protected OptionalEmailRule(final OptionalEmail email) {
        super(email);
    }

    @Override
    public boolean isValid(final String email) {
        if(TextUtils.isEmpty(email)){
            //email is empty and therefore valid
            return true;
        }
        else{
            //email is not empty, proceed as usual
            boolean allowLocal = mRuleAnnotation.allowLocal();
            return EmailValidator.getInstance(allowLocal).isValid(email);
        }

    }
}

OptionalEmail.Java

@ValidateUsing(OptionalEmailRule.class)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface OptionalEmail {
    boolean allowLocal()    default false;

    int sequence()          default -1;
    int messageResId()      default -1;
    String message()        default "Invalid email";

}

内部验证活动

  1. 注册注解

    Validator.registerAnnotation(OptionalEmail.class);
    
  2. 注释字段

    @OptionalEmail
    public EditText editEmail;
    

【讨论】:

  • 太棒了。一个小建议:而不是 email.equals("") 检查你应该使用 TextUtils.isEmpty(email)
猜你喜欢
  • 2018-11-08
  • 1970-01-01
  • 2015-03-28
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多