概念
输入
输入就是待校验的对象,将会被应用到后面的规则中进行判断,也是val函数的第一个参数。
Rebb Val
支持以下数据类型:
输入对象的类型
布尔型 Boolean
数字型 Number
包括整形,长整型,浮点型,高精度浮点型,在Java实现中,内部都会转换成BigDecimal类型来处理。
日期型 Date
在Java中,输入可以是一个java.uitl.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
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);
Last updated
Was this helpful?