Android Saripaar 注解详解
写这篇文章的原因
在移动端一般很少使用复杂的表单,一般针对于属性的更改都会打开一个新的页面进行更改。虽然不多,但是也会有。如果一个页面要输入的内容包括姓名、地址、邮箱、手机号等,对各个属性的验证会非常麻烦,并且非常的不优雅。
于是,saripaar
就出现了,一种基于规则的android ui
输入验证库,通过注解即可标注验证规则。
使用过程中发现只有四个字:简单好用。但是对注解的使用并没有一份完整的文档,故参考源码整理了现有的所有注解(基于版本2.0.3
)。
如何使用
导入依赖
第一步当然是导入依赖啦,可通过implementation 'com.mobsandgeeks:android-saripaar:(latest version)'
导入saripaar
,将(latest version)
替换为最新版本即可。
使用注解
对需要进行验证的可输入view
加上注解来标注验证规则,例
@length(min = 6, max = 9) private appcompatedittext et1;
该注解表示et1
中的输入内容长度只能在6到9的闭区间。
实例化validator
mvalidator = new validator(this); mvalidator.setvalidationlistener(this);
validator
负责验证给定容器中的view
,通常容器为activity
或fragment
。但也可以用包含view
的其他类作为容器。
实现validationlistener
public class mainactivity extends appcompatactivity implements validator.validationlistener { // code… @override public void onvalidationsucceeded() { toast.maketext(this, "成功了!", toast.length_long).show(); } @override public void onvalidationfailed(list<validationerror> errors) { toast.maketext(this, "失败了!", toast.length_long).show(); } }
validationlistener
用户监听回调结果,并进行相应的处理。
调用验证方法
btn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { mvalidator.validate(); } });
其余的高级用法在此不做介绍,该文章主要介绍各个注解的使用。
注解
@assertfalse
描述
用于判断输入内容是否为false
。
作用范围
checkbox
radiobutton
radiogroup
参数
-
sequence
:确定规则的判定顺序,当单个view
有多个规则时生效 -
messageresid
:错误提示文字的资源文件id -
message
:错误提示文字
注:所有注解均有这三个参数,故之后注解省略不写
@asserttrue
描述
用于判断输入内容是否为true
。
作用范围
checkbox
radiobutton
radiogroup
@checked
描述
用于判断输入内容是否为预设值,默认预设值为true
。
作用范围
checkbox
radiobutton
radiogroup
参数
-
value
:用于设置预设值,默认为true
@confirmemail
描述
判断当前输入内容与被@email
注解的view
的内容是否一致。
注:当前容器所持有的被@email
注解的view
必须且只允许有一个。
作用范围
textview
@confirmpassword
描述
判断当前输入内容与被@password
注解的view
的内容是否一致。
注:当前容器所持有的被@password
注解的view
必须且只允许有一个。
作用范围
textview
@creditcard
描述
判断输入内容是否符合信用卡卡号规则。
作用范围
textview
参数
-
cardtypes
:是一个数组,用于确定信用卡的类型,每种类型对应着不同的正则表达式-
type.amex
,美国运通卡,对应着^(3[47]\d{13})$
-
type.diners
,大莱信用卡,对应着^(30[0-5]\d{11}|3095\d{10}|36\d{12}|3[8-9]\d{12})$
-
type.discover
,发现卡,对应着^(6011\d{12})$
、^(64[4-9]\d{13})$
和^(65\d{14})$
-
type.mastercard
,万事达卡,对应着^(5[1-5]\d{14})$
-
type.visa
,签证卡,对应着^(4)(\d{12}|\d{15})$
-
type.none
,不允许任何内置的信用卡,适用于自定义信用卡类型
-
@decimalmax
描述
限制输入内容的最大值,输入内容会被强转为double
类型,若输入文字不符合double
类型,会报conversionexception
异常。
作用范围
textview
参数
-
value
:double
类型,最大值。
@decimalmin
描述
限制输入内容的最小值,输入内容会被强转为double
类型,若输入文字不符合double
类型,会报conversionexception
异常。
作用范围
textview
参数
-
value
:double
类型,最小值。
@digits
描述
判断输入内容是否为数字,可定义整数部分以及小数部分的最大位数。
作用范围
textview
参数
-
integer
:整数部分最大位数 -
fraction
:小数部分最大位数
注:输入内容需满足正则string.format("(\\d{0,%d})(\\.\\d{1,%d})?", integer, fraction);
@domain
描述
判断输入内容是否是一个有效的域名。
作用范围
textview
参数
-
allowlocal
:本地地址是否有效,默认为false
@email
描述
判断输入内容是否是一个有效的邮箱地址。
作用范围
textview
参数
-
allowlocal
:本地地址是否有效,默认为false
@future
描述
判断输入的时间是否是未来时间(与当前时间相比)。输入的时间必须满足相应的格式。
作用范围
textview
参数
-
dateformat
:时间的格式,默认为dd-mm-yyyy
,以下为saripaar
提供的格式(可自定义)-
dateformats.dmy
:dd-mm-yyyy
-
dateformats.ymd
:yyyy-mm-dd
-
dateformats.mdy
:mm-dd-yyyy
-
dateformats.dmy_time_12_hours
:dd-mm-yyyy hh:mm aa
-
dateformats.ymd_time_12_hours
:yyyy-mm-dd hh:mm aa
-
dateformats.mdy_time_12_hours
:mm-dd-yyyy hh:mm aa
-
dateformats.dmy_time_24_hours
:dd-mm-yyyy kk:mm
-
dateformats.ymd_time_24_hours
:yyyy-mm-dd kk:mm
-
dateformats.mdy_time_24_hours
:mm-dd-yyyy kk:mm
-
-
dateformatresid
:时间格式的资源id
@ipaddress
描述
判断输入的内容是否是一个ip
,ipv4
或ipv6
作用范围
textview
@isbn
描述
判断输入的内容是否是一个isbn
,即。
作用范围
textview
@length
描述
限制输入内容的文本长度,可自定义最大长度和最小长度。
作用范围
textview
参数
-
min
:文本的最小长度,默认为integer.min_value
-
max
:文本的最大长度,默认为integer.max_value
-
trim
:是否需要先做trim
操作,默认为false
@max
描述
限制输入内容的最大值,输入内容会被强转为integer
类型,若输入文字不符合integer
类型,会报conversionexception
异常。
作用范围
textview
参数
-
value
:int
类型,最大值。
@min
描述
限制输入内容的最小值,输入内容会被强转为integer
类型,若输入文字不符合integer
类型,会报conversionexception
异常。
作用范围
textview
参数
-
value
:int
类型,最小值。
@notempty
描述
判断输入内容是否非空。
作用范围
textview
参数
-
trim
:判断之前是否要先trim
,默认为false
-
emptytext
:设置“空字符串”,可自定义一段文本,当输入此文本是则为空 -
emptytextresid
:设置“空字符串”的资源文件
@order
描述
确定校验字段的顺序。当一个容器有多个view
需要检验时,可通过该注解确定校验顺序。
作用范围
textview
checkbox
radiobutton
radiogroup
spinner
参数
-
value
:int
类型,用于确定顺序
@password
描述
用于校验文本是否符合密码的规则。
作用范围
textview
参数
-
min
:最小字符数,默认为6 -
scheme
:scheme
类型,利用正则确定密码的输入格式,只能为scheme
类型,不可自定义,默认为password.scheme.any
-
password.scheme.any
:.+
-
password.scheme.alpha
:\w+
-
password.scheme.alpha_mixed_case
:(?=.*[a-z])(?=.*[a-z]).+
-
password.scheme.numeric
:\d+
-
password.scheme.alpha_numeric
:(?=.*[a-za-z])(?=.*[\d]).+
-
password.scheme.alpha_numeric_mixed_case
:(?=.*[a-z])(?=.*[a-z])(?=.*[\d]).+
-
password.scheme.alpha_numeric_symbols
:(?=.*[a-za-z])(?=.*[\d])(?=.*([^\w])).+
-
password.scheme.alpha_numeric_mixed_case_symbols
:(?=.*[a-z])(?=.*[a-z])(?=.*[\d])(?=.*([^\w])).+
-
@past
描述
判断输入的时间是否是过去时间(与当前时间相比)。输入的时间必须满足相应的格式。
作用范围
textview
参数
-
dateformat
:时间的格式,默认为dd-mm-yyyy
,以下为saripaar
提供的格式(可自定义)-
dateformats.dmy
:dd-mm-yyyy
-
dateformats.ymd
:yyyy-mm-dd
-
dateformats.mdy
:mm-dd-yyyy
-
dateformats.dmy_time_12_hours
:dd-mm-yyyy hh:mm aa
-
dateformats.ymd_time_12_hours
:yyyy-mm-dd hh:mm aa
-
dateformats.mdy_time_12_hours
:mm-dd-yyyy hh:mm aa
-
dateformats.dmy_time_24_hours
:dd-mm-yyyy kk:mm
-
dateformats.ymd_time_24_hours
:yyyy-mm-dd kk:mm
-
dateformats.mdy_time_24_hours
:mm-dd-yyyy kk:mm
-
-
dateformatresid
:时间格式的资源id
@pattern
描述
判断输入的内容是否满足正则表达式。
作用范围
textview
参数
-
regex
:正则表达式 -
casesensitive
:是否区分大小写
@select
描述
判断选择的索引是否等于默认值,如果不等于则通过,默认值为0。
作用范围
spinner
参数
-
defaultselection
:设置默认值
@url
描述
判断输入的内容是否是一个url
。
作用范围
textview
参数
-
schemes
:是一个数组,url
的协议数组,可自定义,默认为{"http", "https", "ftp"}
-
allowfragments
:url
片段是否允许通过,默认为true
对于@optional
和@or
虽然该版本已经有了这两个注解,但是并不能使用,参考作者在*
上的,注解将会在2.1.0
版本上线
总结
本篇文章简单介绍了android saripaar
的用法,并着重列举了各个注解的作用以及各个参数的意思,方便以后的查询。
通过阅读源码对saripaar
有了更深的认识,并对基于注解的框架有了一个完备的认知。
以后如果有时间的话总结一下android saripaar
实现的细节。
上一篇: matplotlib和pandas模块子图绘制总结
下一篇: goweb- 对请求的处理
推荐阅读
-
解析Android开发优化之:对界面UI的优化详解(一)
-
解析Android开发优化之:对界面UI的优化详解(二)
-
解析Android开发优化之:对界面UI的优化详解(三)
-
Android SQLite数据库增删改查操作的使用详解
-
Android笔记之:App自动化之使用Ant编译项目多渠道打包的使用详解
-
基于Android设计模式之--SDK源码之策略模式的详解
-
解析Android开发优化之:对Bitmap的内存优化详解
-
基于Android中Webview使用自定义的javascript进行回调的问题详解
-
Android工程:引用另一个Android工程的方法详解
-
基于Android应用中如何反馈Crash报告的详解