专一于 Android 表单验证,用方法链构建你的验证规则。php
野生程序员一枚,喜欢重复发明轮子,~java
当即关注 JianyingLiandroid
项目托管在GitHub,欢迎Star!git
https://github.com/lijy91/blankapp-validation程序员
Android表单验证的库已经很多,例如经过注解方法的 android-saripaar,直接自定义控件的 android-edittext-validator 等等,然而这几种方式我都以为过于麻烦,都不是个人菜!github
并且恰好最近在用 Laravel 作一个项目,被它提供的表单验证功能迷倒了,至关的简单、直观,构建验证规则也很是的方便,因此才萌生了本身写这个库的想法,经过链式调用构建咱们的表单验证规则。app
示例maven
$rules = [ 'username' => 'required|between:4,32|alpha_dash|unique:users', 'email' => 'required|email|unique:users', 'password' => 'required|between:6,32', ]; $this->validate($request, $rules);
支持如下控件或派生自如下的控件ide
EditText测试
CompoundButton
一、只需将 mvn-repo 地址添加到您的项目根目录 build.gradle 文件:
repositories { maven { url 'https://raw.githubusercontent.com/lijy91/mvn-repo/master/' } jcenter() }
二、在要集成的模块 build.gradle 文件中添加依赖,以下:
dependencies { compile 'org.blankapp:blankapp-validation:0.0.1-alpha@aar' }
实例化一个验证器
final Validator validator = new Validator();
构建你的规则链并添加到验证器
// 邮箱必须输入,必须为邮箱格式 validator.add(Rule.with(mEtEmail).required().email()); // 用户名必须输入,只能输入字母及下划线 validator.add(Rule.with(mEtUsername).required().alphaDash()); validator.add(Rule.with(mEtName).required().minLength(2).maxLength(32)); // 密码必须输入,最小长度为6位,最大长度为32位 validator.add(Rule.with(mEtPassword).required().minLength(6).maxLength(32)); // 生日必须输入,格式为yyyy-MM-dd(1991-06-01)而且是今天以前的日期 validator.add(Rule.with(mEtBirthday).required().date("yyyy-MM-dd").before(DateValidator.TODAY)); // 年龄必须输入,而且为 18 ~ 60 岁 validator.add(Rule.with(mEtAge).required().between(18, 60)); // 简介必须输入,而且最大长度不能超过255个字符 validator.add(Rule.with(mEtBio).required().maxLength(255)); // 用户协议必须接受 validator.add(Rule.with(mCbAccepted).accepted());
阅读文档,查看全部验证规则
设置验证失败处理器
validator.setErrorHandler(new DefaultHandler());
设置验证结果监听器
validator.setValidatorListener(new ValidationListener() { @Override public void onValid() { Toast.makeText(MainActivity.this, "验证经过", Toast.LENGTH_SHORT).show(); } @Override public void onInValid(List<ValidationError> errors) { for (ValidationError error : errors) { Log.w("MainActivity", "Id:" + error.view().getId()); for (String key : error.errorMessages().keySet()) { Log.e("MainActivity", error.errorMessages().get(key)); } } Toast.makeText(MainActivity.this, "验证失败", Toast.LENGTH_SHORT).show(); } });
在你构建规则时,若是不指定字段名,程序将会根据传入 View 的 Id 按规则从 strings 资源里获取字段名
资源名的命名规则为:前缀 validation_field_
与移除前缀后的 viewId
拼接组成。
若是 viewId
为 edt_email
,则该字段名的资源名为 validation_field_email
P.S. 控件的命名规则必须为下划线命名法,而且必须包含前缀,如 btn_
、edt_
等
示例:
<string name="validation_field_email">电子邮箱</string> <string name="validation_field_username">用户名</string> <string name="validation_field_name">姓名</string> <string name="validation_field_password">密码</string> <string name="validation_field_birthday">生日</string> <string name="validation_field_age">年龄</string> <string name="validation_field_bio">简介</string>
将须要修改的错误消息添加到你的项目资源文件里,查看所有可配置的错误消息。
示例:
... <string name="validation_error_message_accepted">%1$s 必须接受。</string> <string name="validation_error_message_after">%1$s 必须是一个在 %2$s 以后的日期。</string> <string name="validation_error_message_alpha">%1$s 只能由字母组成。</string> <string name="validation_error_message_alpha_dash">%1$s 只能由字母、数字和破折号组成。</string> <string name="validation_error_message_alpha_num">%1$s 只能由字母和数字组成。</string> ...
当前版本还处理测试阶段,暂不建议应用于真实项目中,若是你有更好的想法,或者但愿加入其余功能欢迎给我提 Issues。