Android 输入校验库简介及使用教程

Stella981
• 阅读 569

NextInputs项目地址:https://github.com/yoojia/NextInputs

Android扩展项目地址:https://github.com/yoojia/NextInputs-Android

Android 输入校验库简介及使用教程


NextInputs 特点

  • 轻量级,纯JDK实现,无第三方依赖;
  • 小巧,Jar文件仅30K+;
  • 内置20+个常用校验模式;
  • 支持自定义校验模式扩展;
  • 支持自定义校验目标扩展;
  • 支持自定义错误消息提示;

NextInputs 内建了两种校验模式分类:静态校验模式数值校验模式。 使用NextInputs能够极大地提升开发效率,内置的多个校验模式已能应付开发常用的校验需求,如有特殊校验需求,通过扩展接口也能快速解决。


使用示例

NextInputs inputs = new NextInputs();
inputs.add(Inputs.fromString(mUsername),
        StaticPattern.Required(),
        StaticPattern.Email()
);
boolean passed = inputs.test();

配置 Gradle 依赖

dependencies {
    compile 'com.github.yoojia:next-inputs:1.3.3'
}

StaticPattern - 静态校验模式

静态校验模式也可以称为数据格式匹配模式。在校验时不需要其它辅助参数,而是直接校验输入数据的格式是否符合要求。 NextInputs目前内置包含以下几种静态校验模式,在未来版本也会加入其它使用频率较高的模式:

  • Required - 必填模式
  • NotBlank - 非空模式
  • Digits - 数字模式
  • Email - 邮件地址模式
  • IPv4 - IP地址模式
  • Host - 域名模式
  • URL - URL地址模式
  • Numeric - 数值模式
  • BlankCard - 银行卡/信用卡号码模式
  • ChineseIDCard 身份证号码模式
  • ChineseMobile 手机号码模式(国内手机号)
  • IsTrue - 结果为True模式
  • IsFalse - 结果为False模式

Required - 必填模式

设置Required模式后,输入内容不能为空,也是NextInputs不允许空值的两条校验规则之一

在设置Required模式后,Required模式在校验时会优先于其它模式。其它校验模式在默认情况下将按代码添加顺序依次执行。

注意:

  • Required的校验优先级默认为 StaticPattern/ValuePattern.PRIORITY_REQUIRED(-1024),其它优先级为 StaticPattern/ValuePattern.PRIORITY_GENERAL(0)
  • 如果输入条目没有添加Required校验模式(或者NotBlank模式),在输入内容为空的情况下,校验结果是通过(Passed)的。

NotBlank - 非空数据模式

设置Required模式后,输入内容不能是任何空值,也是NextInputs不允许空值的两条校验规则之一

StaticPattern.Required(),输入内容不能为任何空数据,除空数据外,还包括任意数量的纯空格、制表符等。

Digits - 数字模式

StaticPattern.Digits(),输入内容只能是纯数字。

Email - 邮件地址模式

StaticPattern.Email(),输入内容必须是有效的电子邮件地址。

IPv4 - IP地址模式

StaticPattern.IPv4(),输入内容必须是有效的IPv4地址。

Host - 主机地址模式

StaticPattern.Host(),输入内容必须是有效的主机地址。这个模块包含了IPv4的校验。

URL - URL地址模式

StaticPattern.URL(),输入内容必须是有效的URL地址。

Numeric - 数值模式

StaticPattern.Numeric(),输入内容必须是有效的数值。

BlankCard - 银行卡/信用卡号码模式

StaticPattern.BlankCard(),输入内容必须是有效的银行卡号或者信用卡号。这个模式在实现上,使用银行卡号校验算法(Luhn)来校验,可以支持13位到19位长度的有效卡号。

ChineseIDCard 身份证号码模式

StaticPattern.ChineseIDCard(),输入内容必须是有效的中国居民身份证号码。这个模式支持15位和18位身份证号。

ChineseMobile 手机号码模式(国内手机号)

StaticPattern.ChineseMobile(),输入内容必须是有效的手机号。这个手机号必须是11位国内手机号,其它国家或者地区的手机号暂不支持。

IsTrue - 结果为True模式

StaticPattern.IsTrue(),输入内容必须是True值。通常用于校验RadioBotton或者CheckBox等。

IsFalse - 结果为False模式

StaticPattern.IsFalse(),输入内容必须是False值。通常用于校验RadioBotton或者CheckBox等。


ValuePattern - 数值校验模式

数值校验模式需要指定校验参数来完成校验。 NextInputs目前内置包含以下几种数值校验模式,在未来版本也会加入其它使用频率较高的模式:

  • Required - 必填模式,与静态校验模式的必填模式相同。
  • MinLength - 最小内容长度
  • MaxLength - 最多内容长度
  • RangeLength - 内容长度在指定范围内
  • MinValue - 最小值
  • MaxValue - 最大值
  • RangeValue - 数值范围
  • Equals - 与指定内容相同
  • NotEquals - 与指定内容不相同

Required - 必填项目

ValuePattern.Required(),与StaticPattern.Required相同。

MinLength - 最小内容长度

ValuePattern.MinLength(minLength),输入内容的长度至少(包括)为指定长度。

MaxLength - 最多内容长度

ValuePattern.MaxLength(maxLength),输入内容的长度最大(包括)为指定长度。

RangeLength - 内容长度在指定范围内

ValuePattern.RangeLength(minLength, maxLength),输入内容的长度在指定范围内。

MinValue - 最小值

ValuePattern.MinValue(minValue),输入数值最小(包括)为指定数值。支持的数值类型:Int、Long、Float、Double;

MaxValue - 最大值

ValuePattern.MaxValue(minValue),输入数值最大(包括)为指定数值。支持的数值类型:Int、Long、Float、Double;

RangeValue - 数值范围

ValuePattern.RangeValue(minValue, maxValue),输入数值在(包括)指定数值范围内。支持的数值类型:Int、Long、Float、Double;

Equals - 与指定内容相同

ValuePattern.Equals(...),输入内容与指定内容相同。Equals有两个实现方式,一个是Equals(Loader<String>),另一个是Equals(fixedString)

  • Equals(Loader<String>),延迟加载参数形式。当开始校验时,Loader的getValue方法才会被执行,并要求返回一个用于匹配输入内容的字符串;
  • Equals(fixedString),与指定固定字符串相同;

NotEquals - 与指定内容不相同

方式与ValuePattern.Equals相同,判断方式取反。


设置校验失败提示消息

NextInputs内置的所有校验模式都自带提示消息,这些提示消息描述也比较“抽象”,很可能不符合你的业务需要。使用 .msgOnFail(String) 接口或者 .msg(String) 接口可以设置校验失败提示消息。当校验失败时,提示消息将通过MessageDisplay接口的具体实现类处理并显示出来。

这两个接口的作用是相同的,如果你觉得.msg(String)会导致你突然忘记这方法是干哈的,你可以使用.msgOnFail(String)方法来提醒自己。

使用 NextInputs.setMessageDisplay(MessageDisplay) 方法可以覆盖默认实现,使用你想要的校验失败提示方式。


自定义校验优先级

NextInputs是通过 Pattern.priority 的数值来决定优先级的,按数值升序。在非常有必要的情况下,可以使用 Pattern.setPriority(int) 方法来自定义校验模式的优先级。不建议自定义优先级,使用代码顺序即可。


空值

NextInputs对输入数据空值字符串的定义是:

input == null || input.length() == 0

分享交流

如果你有想法和建议与我交流,欢迎通过下面方式联系:

Android 输入校验库简介及使用教程

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Golang注册Eureka的工具包goeureka发布
1.简介提供Go微服务客户端注册到Eureka中心。点击:github地址(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2FSimonWang00%2Fgoeureka),欢迎各位多多star!(已通过测试验证,用于正式生产部署)2.原理
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这