RebbVal
CN
CN
  • 快速上手
  • 概述
  • 概念
  • 规则列表
    • 年龄
    • 数组
    • 布尔
    • 比较
    • 组合
    • 日期时间
    • 标识码
    • 互联网
    • 地区相关
    • 字符串
Powered by GitBook
On this page
  • 输入
  • 输入对象的类型
  • 规则
  • 规则中的数据类型
  • 结果
  • 错误
  • 自定义验证器
  • 时区

Was this helpful?

概念

输入

输入就是待校验的对象,将会被应用到后面的规则中进行判断,也是val函数的第一个参数。

Rebb Val 支持以下数据类型:

输入对象的类型

布尔型 Boolean

数字型 Number

包括整形,长整型,浮点型,高精度浮点型,在Java实现中,内部都会转换成BigDecimal类型来处理。

日期型 Date

在Java中,输入可以是一个java.uitl.Date类型

可以用RebbVal的内置函数date()来将字符串快捷的转换成日期

RebbVal v = new RebbVal();
v.val(v.date("2010-05-01"),"between 2010-01-01 and 2020-01-01"); // true 

//自定义日期格式
v.val(v.date("2020/12/31","yyyy/MM/dd"), "[2020-01-01, 2021-12-31]"); //true

使用RebbVal内置函数year()来将年份字符串快捷地转换成日期

v.val(v.year("2000"), "is leapyear"); //true

字符串型 String

规则

规则就是一个字符串,但是必须符合RebbVal的语法,是val函数的第二个参数

支持的语法如下:

  • 比较: =, !=, >,<,>=,<=

  • 范围:between .. and ..

  • 区间:interval,如[a..b],(a..b),[a..b),(a..b]

  • 在数组内:in (array)

  • 包含:contains

  • 不为空:not empty

  • 最大长度:max length

  • 是否满足:is (true, false, phone, email, ipv4,url, ect.)

  • 自定义判断:is (custom function)

  • 匹配正则:match (regex)

  • 年龄大于/小于:older than/younger than

  • 以...开始/结束:starts with/ends with

可以使用not操作来反转规则

可以用and 和or来组合规则

规则中的数据类型

数组 array

// 数字数组
[1,2,3.0]

//字符串数组
['foo','bar']

布尔 boolean

true

false

数字 number

// 整数 integer
1
-300
// 浮点数 float
3.1415
-39.

// 暂时还不支持
// .8
// 80%
// 1.05e8

日期 date

// yyyy-MM-dd
2014-12-01

// 可以省略前导0
2020-1-1

正则表达式 regex

// 用斜杠包围正则表达式
/^\d+$/

//支持的修饰符:g,i,m,s,x,u,U
/\d+/g

字符串 string

// 用单引号来标识字符串
'a string'

结果

val 函数的结果是一个布尔型。

如果结果是true,说明输入对象通过了所有的规则校验,否则可以通过调用 getErrors 方法来获取所有校验失败的详细信息。

错误

如果val函数返回false,或者hasError函数返回true,那就代表有错误,验证失败。

可以调用getErrors函数来获取具体的错误信息,返回值是一个字符串数组(在Java实现中,是一个ArrayList<String>)。

v.val(8.8,">=10"); // false
v.getErrors().size() // 1
v.getErrors().get(0) // 8.8 >=10 failed

自定义验证器

先来看一下 com.rebb.valid.IValidator 接口

package com.rebb.valid;

public interface IValidator {
    public boolean run(Object obj) throws ValidationException;
}

可以看到这个接口只有一个返回值为布尔值run方法,写一个类来实现IValidator接口,就可以实现一个自定义验证器

package com.example.valid;

public class DemoCustomValidator implements IValidator{

    @Override
    public boolean run(Object obj) throws ValidationException {
        if(obj instanceof String)
        {
            String object = (String)obj;
            return object.equals("Demo");
        }
        else
        {
            throw new ValidationException("Unsupported object type");
        }
    }
}

初始化 RebbVal 对象之后, 调用 registerCustomValidator 方法来注册自定义验证器

Valid v = new Valid();
v.registerCustomValidator("Demo", DemoCustomValidator.class);
v.val("Demo","is Demo"); // true

时区

当我们处理日期时间的时候,时区永远是我们第一个要考虑的,我们可以像下面这样设置时区:

Valid v = new Valid();
v.setTimezone(Locale.CHINA);

Previous概述Next年龄

Last updated 3 years ago

Was this helpful?