V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lijy91
V2EX  ›  Android

[BLANKAPP-VALIDATION] 专注于 Android 表单验证,用方法链构建你的验证规则

  •  
  •   lijy91 · 2016-06-29 09:55:14 +08:00 · 4500 次点击
    这是一个创建于 2848 天前的主题,其中的信息可能已经有所发展或是发生改变。

    专注于 Android 表单验证,用方法链构建你的验证规则。

    野生程序员一枚,喜欢重复发明轮子,~

    立即关注 JianyingLi

    项目托管在 GitHub ,欢迎 Star ! https://github.com/lijy91/blankapp-validation

    为什么重复造轮子

    Android 表单验证的库已经不少,例如通过注解方法的 android-saripaar,直接自定义控件的 android-edittext-validator 等等,然而这几种方式我都觉得过于麻烦,都不是我的菜!

    而且刚好最近在用 Laravel 做一个项目,被它提供的表单验证功能迷倒了,相当的简单、直观,构建验证规则也非常的方便,所以才萌生了自己写这个库的想法,通过链式调用构建我们的表单验证规则。

    示例

    $rules = [
        'username' => 'required|between:4,32|alpha_dash|unique:users',
        'email'    => 'required|email|unique:users',
        'password' => 'required|between:6,32',
    ];
    $this->validate($request, $rules);
    

    支持验证的控件

    支持以下控件或派生自以下的控件

    • EditText
    • CompoundButton

    如何使用

    添加依赖

    1 、只需将 mvn-repo 地址添加到您的项目根目录 build.gradle 文件:

    repositories {
        maven { url 'https://raw.githubusercontent.com/lijy91/mvn-repo/master/' }
        jcenter()
    }
    

    2 、在要集成的模块 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 拼接组成。 如果 viewIdedt_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

    BLANKAPP-VALIDATION 讨论群

    1 条回复    2016-06-29 10:13:28 +08:00
    Override
        1
    Override  
       2016-06-29 10:13:28 +08:00
    我仿佛又听到有人在背后 @我
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5552 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:12 · PVG 16:12 · LAX 01:12 · JFK 04:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.