验证规则的定义通常有三种方式,如果你使用了验证器的话,通常通过constructor
构建函数中的super()
方法或者修改类属性来定义验证规则,而如果使用的是独立验证的话,则是通过setRule
方法进行定义。
# super定义
class LoginValidate extends Validate
{
constructor()
{
const rules = {
'user' : 'require|mail|max:30',
'pass' : 'require|chsDash|length:6,16'
}
super(rules)
}
}
# 修改类属性
class LoginValidate extends Validate
{
rule = {
'user' : 'require|mail|max:30',
'pass' : 'require|chsDash|length:6,16'
}
}
WARNING
系统内置了一些常用的验证规则可以满足大部分的验证需求,具体每个规则的含义参考内置规则一节。
一个字段可以使用多个验证规则(如上面的user
字段定义了require
和max
,mail
三个验证规则)
# 方法定义
如果使用的是独立验证(即手动调用验证类进行验证)方式的话,通常使用setRule
方法进行验证规则的设置,举例说明如下。
$data = {
'user' : 'admin@admin.com',
'pass' : '123456'
};
const rules = {
'user' : 'require|mail|max:30|diy:1111',
'pass' : 'require|chsDash|length:6,16'
};
const login = new Validate();
login.setRule(rules)
if(!login.check($data)){
console.log(login.getError())
}
# 自定义验证规则
系统内置了一些常用的规则(参考后面的内置规则),如果不能满足需求,可以在验证器重添加额外的验证方法,例如:
class User extends Validate
{
constructor(){
const rules = {
'name' : 'require|check_name:michael',
'email' : 'mail'
};
const message = {
'name.require' : '用户名必须填写',
'email.mail' : '填入的邮箱不是有效的电子邮件地址'
}
super(rules,message)
}
check_name(value, rule, data = {})
{
return value === rule ? true : '用户名错误';
}
}
验证方法可以传入的参数共有4
个(后面两个根据情况选用),依次为:
- 验证数据
- 验证规则
- 全部数据(数组)
- 其他数据(数组)如
check_name:michael:1:2
此处为除去michael
以外的1,2
数据
有时候我们需要对这么自定义验证方法进行一些复用,这时候就需要自定义一个验证器
class UserRule extends BaseValidateRule{
check_name(value, rule, data = {})
{
return value === rule ? true : '用户名错误';
}
}
然后在Validate验证器
中将这个类注册到进去
this.register(new UserRule)
# 自定义正则规则
实例化一个规则器,然后预定义一个或多个正则规则
const v = new Validate()
let validator = new BaseValidator()
或者可以使用验证器内默认的规则器
let validator = v.getValidator()
validator.setRegex({
"qq":/[1-9][0-9]{4,}/
});
记得注册到验证器中才会生效(如果是从验证器内获取的无需注册)
v.register(validator)
然后就可以和其他规则一样使用
v.setRule({
"value" :"qq"
});
v.setMsg({
"value.qq" :"请输入正确的QQ格式"
});
# 复杂条件验证
有时候你可能需要增加基于更复杂的条件逻辑的验证规则。例如,你可以希望某个指定字段在另一个字段的值超过 100 时才为必填。或者当某个指定字段存在时,另外两个字段才能具有给定的值。增加这样的验证条件并不难。首先,使用 静态规则 创建一个 Validate
实例:
let v = Validate.make({
"age" : 'require|number',
})
假设我们提供了一个个人信息登记的软件,如果年龄没有超过150岁,则默认为人类,如果超过了150岁,则需要用户必须填写物种,为了在特定条件下加入此验证需求,可以在 Validate
实例中使用 sometimes
方法
v.sometimes("species","require|chsAlpha",function (data) {
return data.age > 150;
})
传入 sometimes 方法的第一个参数是要用来验证的字段名称。第二个参数是我们想使用的验证规则。 闭包 作为第三个参数传入,如果其返回 true , 则额外的规则就会被加入。这个方法可以轻松地创建复杂的条件验证。你甚至可以一次对多个字段增加条件验证:
v.sometimes(["species","planetName"],"require",function (data) {
return data.age > 150;
})