概念说明
android-saripaar是一个Android用于表单校验的UI校验框架,通过Annotation添加注解来实现UI校验。此框架具有以下几点优势:
- 使用简单
只需要导入对应的Jar包即可使用
- 易于扩展
可以相对方便的自定义规则,同时相对方便的支持部分其他的Annotation校验。
https://github.com/ragunathjawahar/android-saripaar/
基础使用
引入Jar包
第一步,首先需要引入此jar包才能够使用,例如在Gradle中进行配置或者单独引入,示例如下:
implementation 'com.mobsandgeeks:android-saripaar:2.0.3'
添加注解规则
此UI框架可以在每个单独需要校验的EditView等需要校验的View中添加注解,从而完成对此View的规则设置,示例如下:
@NotEmpty
@Email
@Order(1)
private var eText: EditText? = null
@NotEmpty
@Order(2)
private var eText2: EditText? = null
示例代码中,@NotEmpty
规则是不为空,@Email
是限制邮箱格式,@Order
是确定校验顺序。
引入校验
在OnCreate()
方法中设置
var validator: Validator = Validator(this) //引入校验
validator.setValidationListener(object : Validator.ValidationListener {
override fun onValidationFailed(errors: MutableList<ValidationError>?) {
//todo 校验失败回调,可以获取到error List
}
override fun onValidationSucceeded() {
//todo 全部校验成功回调
}
})
使用校验
调如下方法完成校验
validator.validate()
注解规则个人理解
注解规则分块
注解规则主要包含两个方面:注解;规则Rule。
注解
注解主要定义了注解名称,注解错误提示信息,最大最小长度等基本规则和提示。
规则Rules
规则Rules可以用来定义具体的规则,包括正则表达式的设定etc.部分jar包自带规则可能会在校验文件里面进行设定。
自定义注解
按照上述理解,简单的注解可以分为两个部分,因此只需要重新定义注解和规则rule即可完成重新设定。
重设注解
注解的整体结构包含三个必设属性和其他自定义属性,示例代码如下:
@ValidateUsing(HaggleRule.class)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Haggle {
public int messageResId() default -1; // 必设属性
public String message() default "Oops... too pricey"; // 必设属性,用来设置出错信息提示
public int sequence() default -1; // 必设属性
public double maximumAskingPrice(); //自设属性
}
重设规则
重写对应注解的规则Rule, 继承于AnnotationRule。
public class PhoneSpecialRule extends AnnotationRule<PhoneSpecial, String> {
/*
* http://stackoverflow.com/questions/1559751/
* regex-to-make-sure-that-the-string-contains-at-least-one-lower-case-char-upper
*/
private final Map<PhoneSpecial.Scheme, String> SCHEME_PATTERNS =
new HashMap<PhoneSpecial.Scheme, String>() {{
put(PhoneSpecial.Scheme.ANY, ".+");
put(PhoneSpecial.Scheme.ALPHA, "^[0-9]+$"); //只包含数字
}};
protected PhoneSpecialRule(final PhoneSpecial phoneSpecial) {
super(phoneSpecial);
}
@Override
public boolean isValid(final String password) {
boolean hasMinChars = password.length() >= mRuleAnnotation.min();
boolean matchesScheme = password.matches(SCHEME_PATTERNS.get(mRuleAnnotation.scheme()));
return hasMinChars && matchesScheme;
}
}
如示例代码所示,主要包含有以下几个方面:
- 设置私有属性SCHEME_PATTERNS,可以使用正则表达式来对具体的输入样式进行设定。
- 设置构造方法
- 重写方法
isValid()
,重新定义规则,可以将具体的输入样式SCHEME_PATTERNS导入其中,规范输入样式。
自定义规则注册
在进行引入校验之前,需要对自定义的规则进行注册,否则自定义规则无效,示例代码如下。
Validator.registerAnnotation(PhoneSpecial::class.java)
备注:如果项目内存在混淆保护,需要对自定义规则以及注册对象添加混淆保护。
备注
本片内容仅对android-saripaar最简单基本的使用进行了说明。
网友评论