0.7.7 • Published 4 years ago
js-vfn v0.7.7
可供验证的函数
安装
npm i js-vfn -S
结构
const VFn = require('vfn');
// 定义
const foo = new VFn({
params: {
// 通用校验, 默认内置 number / string / object / array 等
p1: {
type:'number',
required:true, // required 默认为 false
},
p2: {
type:'object',
nullable:false, // object & string & array 支持非空校验, 默认 true
children: { // object & array 支持子类校验
c1: { type:'number', /* ... */ }, // 精确校验,
'*': { type:'string', } // 通用校验, 非精确匹配的参数都会走这个校验
// 数组的子项校验, children 支持嵌套
// 与对象的子项校验(以key为锚)不同, 数组的子项以 index 为判断依据
// 如下, 校验只定义了2个, 假设传进来的子项大于2, 那多余出来的部分都会以最末存在的校验器去校验
arr: { type:'array', nullable:false, children:[
{ type:'number', reg:/[7-9]/ },
{ type:'string' }
] },
}
},
// 自定义校验
p3: {
type:'mobile',
reg:/^1[3-9]\d{9}$/, // 支持正则, 如果传入正则, 会覆盖默认的 validate
validate: function(val) { // 支持自定义校验函数, 如果和正则同时存在, 则仅使用正则
return false;
},
message:'手机号码不对噢' // 支持自定义报错信息
},
p4: {
type:'number+',
gt:5,
lt:1,
bt:[3,5],
validate: {
gt: function(val) { val > this.gt },
lt: function(val) { val < this.lt }
bt: function(val) { val > this.bt[0] && val < this.bt[1] }
},
message: {
gt: '${PARAM} 必须大于 ${gt}',
lt: '${PARAM} 必须小于 ${lt}',
bt: '${PARAM} 必须介于 ${bt} 之间',
}
}
},
entry(args) {
const { p1,p2,p3 } = args;
// 把校验相关都放到 params 里
// entry 里可以只专注业务代码
...doSomething
}
});
// 使用
// 注: 因为校验的时候使用的键值对, 所以在使用的时候也需要定义键值对, 而非普通的 foo(1,{},'13131313131');
foo({ p1:1, p2:{}, p3:'13131313131' });