zoukankan      html  css  js  c++  java
  • 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,通常容器为ActivityFragment。但也可以用包含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}|3095d{10}|36d{12}|3[8-9]d{12})$
      • Type.DISCOVER,发现卡,对应着^(6011d{12})$^(64[4-9]d{13})$^(65d{14})$
      • Type.MASTERCARD,万事达卡,对应着^(5[1-5]d{14})$
      • Type.VISA,签证卡,对应着^(4)(d{12}|d{15})$
      • Type.NONE,不允许任何内置的信用卡,适用于自定义信用卡类型

    @DecimalMax

    描述

    限制输入内容的最大值,输入内容会被强转为Double类型,若输入文字不符合Double类型,会报ConversionException异常。

    作用范围

    • TextView

    参数

    • valuedouble类型,最大值。

    @DecimalMin

    描述

    限制输入内容的最小值,输入内容会被强转为Double类型,若输入文字不符合Double类型,会报ConversionException异常。

    作用范围

    • TextView

    参数

    • valuedouble类型,最小值。

    @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.DMYdd-MM-yyyy
      • DateFormats.YMDyyyy-MM-dd
      • DateFormats.MDYMM-dd-yyyy
      • DateFormats.DMY_TIME_12_HOURSdd-MM-yyyy hh:mm aa
      • DateFormats.YMD_TIME_12_HOURSyyyy-MM-dd hh:mm aa
      • DateFormats.MDY_TIME_12_HOURSMM-dd-yyyy hh:mm aa
      • DateFormats.DMY_TIME_24_HOURSdd-MM-yyyy kk:mm
      • DateFormats.YMD_TIME_24_HOURSyyyy-MM-dd kk:mm
      • DateFormats.MDY_TIME_24_HOURSMM-dd-yyyy kk:mm
    • dateFormatResId:时间格式的资源ID

    @IpAddress

    描述

    判断输入的内容是否是一个IPIPv4IPv6

    作用范围

    • TextView

    @Isbn

    描述

    判断输入的内容是否是一个Isbn,即国际标准书号

    作用范围

    • TextView

    @Length

    描述

    限制输入内容的文本长度,可自定义最大长度和最小长度。

    作用范围

    • TextView

    参数

    • min:文本的最小长度,默认为Integer.MIN_VALUE
    • max:文本的最大长度,默认为Integer.MAX_VALUE
    • trim:是否需要先做trim操作,默认为false

    @Max

    描述

    限制输入内容的最大值,输入内容会被强转为Integer类型,若输入文字不符合Integer类型,会报ConversionException异常。

    作用范围

    • TextView

    参数

    • valueint类型,最大值。

    @Min

    描述

    限制输入内容的最小值,输入内容会被强转为Integer类型,若输入文字不符合Integer类型,会报ConversionException异常。

    作用范围

    • TextView

    参数

    • valueint类型,最小值。

    @NotEmpty

    描述

    判断输入内容是否非空。

    作用范围

    • TextView

    参数

    • trim:判断之前是否要先trim,默认为false
    • emptyText:设置“空字符串”,可自定义一段文本,当输入此文本是则为空
    • emptyTextResId:设置“空字符串”的资源文件

    @Order

    描述

    确定校验字段的顺序。当一个容器有多个View需要检验时,可通过该注解确定校验顺序。

    作用范围

    • TextView
    • CheckBox
    • RadioButton
    • RadioGroup
    • Spinner

    参数

    • valueint类型,用于确定顺序

    @Password

    描述

    用于校验文本是否符合密码的规则。

    作用范围

    • TextView

    参数

    • min:最小字符数,默认为6
    • schemeScheme类型,利用正则确定密码的输入格式,只能为Scheme类型,不可自定义,默认为Password.Scheme.ANY
      • Password.Scheme.ANY.+
      • Password.Scheme.ALPHAw+
      • Password.Scheme.ALPHA_MIXED_CASE(?=.*[a-z])(?=.*[A-Z]).+
      • Password.Scheme.NUMERICd+
      • 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.DMYdd-MM-yyyy
      • DateFormats.YMDyyyy-MM-dd
      • DateFormats.MDYMM-dd-yyyy
      • DateFormats.DMY_TIME_12_HOURSdd-MM-yyyy hh:mm aa
      • DateFormats.YMD_TIME_12_HOURSyyyy-MM-dd hh:mm aa
      • DateFormats.MDY_TIME_12_HOURSMM-dd-yyyy hh:mm aa
      • DateFormats.DMY_TIME_24_HOURSdd-MM-yyyy kk:mm
      • DateFormats.YMD_TIME_24_HOURSyyyy-MM-dd kk:mm
      • DateFormats.MDY_TIME_24_HOURSMM-dd-yyyy kk:mm
    • dateFormatResId:时间格式的资源ID

    @Pattern

    描述

    判断输入的内容是否满足正则表达式。

    作用范围

    • TextView

    参数

    • regex:正则表达式
    • caseSensitive:是否区分大小写

    @Select

    描述

    判断选择的索引是否等于默认值,如果不等于则通过,默认值为0。

    作用范围

    • Spinner

    参数

    • defaultSelection:设置默认值

    @Url

    描述

    判断输入的内容是否是一个url

    作用范围

    • TextView

    参数

    • schemes:是一个数组,url的协议数组,可自定义,默认为{"http", "https", "ftp"}
    • allowFragmentsurl片段是否允许通过,默认为true

    对于@Optional@Or

    虽然该版本已经有了这两个注解,但是并不能使用,参考作者在stackoverflow上的回复,注解将会在2.1.0版本上线

    总结

    本篇文章简单介绍了Android Saripaar的用法,并着重列举了各个注解的作用以及各个参数的意思,方便以后的查询。

    通过阅读源码对saripaar有了更深的认识,并对基于注解的框架有了一个完备的认知。

    以后如果有时间的话总结一下Android Saripaar实现的细节。

  • 相关阅读:
    数据库 'tempdb' 的日志已满的解决方法
    SQL Server2005|身份验证模式修改转载
    GRUB讲解转载
    远程连接sql server 2000服务器的方法,及配置sql数据库服务器转载
    SQL 删除一列的语句
    陶哲轩实分析 命题 8.2.6 证明
    陶哲轩实分析 引理 8.2.3 证明
    陶哲轩实分析 习题 7.5.3
    陶哲轩实分析 习题 7.5.3
    陶哲轩实分析 引理8.2.7 注
  • 原文地址:https://www.cnblogs.com/lanxingren/p/11973882.html
Copyright © 2011-2022 走看看