验证器说明

# Usage ### Basic ```javascript const validator = new Validator({ // 指定一些具名测试函数 Specify some named test functions mobile(val){ return /^1[3456789]\d{9}$/.test(val) } }) ;(async ()=>{ const valid = await validator.validate('15600001111', 'mobile') // 等同于 // const valid = await validator.v('15600001111', 'mobile') // true })() ``` ### 预设的测试函数 - truthy - 真值 - falsy - 假值 - object - 对象 - number - 数值 - string - 字符串 - truthyString - 非空字符串 - boolean - 布尔值 - null - null/undefined - completeNull - null - completeUndefined - undefined - function - function - array - array - any - 任何类型 ```javascript module.exports = { truthy(val){ return !!val }, truthyString(val){ return !!val && typeof val === 'string' }, falsy(val){ return !val }, object(val){ return val && typeof val === 'object' }, number(val){ return typeof val === 'number' }, string(val){ return typeof val === 'string' }, boolean(val){ return typeof val === 'boolean' }, null(val){ return val == null }, completeNull(val){ return val === null }, completeUndefined(val){ return val === undefined }, function(val){ return typeof val === 'function' }, array(val){ return val instanceof Array }, any(){ return true } } ``` ### 规则的写法 一条规则可以是字符串,正则表达式,数组,对象或者自定义函数 #### 使用字符串调用默认/自定义的测试函数 ```javascript validator.v('12', 'number') ``` #### 使用数组表示逻辑与 ```javascript validator.v('12', ['string', /1/, /2/]) ``` #### 使用对象 ```javascript validator.v({ a: '12', b: 12, c: null }, { b: 'number', a: 'string', c: null }) ``` ##### 使用$ ```javascript validator.v({ a: '123124124', b: 1241231, c: null }, { // key后加$ 表示可以不存在,否则必须存在 a$: 'string', b: 'number', // 字符规则后加$表示可以为null/undefined c: 'number$', // $表示被验证的对象本身 $: 'object', // $subItem 表示当前验证被验证对象/数组下的所有值,表示...obj或...array $subItem: 'truthy', // $or 表示一条规则,表示验证对象需要至少符合数组内的任一项 $or: ['string' , 'object'], }) ``` ##### 使用$来描述复杂的require关系 ```javascript validator.v({ a: '123124124', b: 1241231, c: null }, { //当a存在是 c必须存在,a不存在时,c也可以不存在 a$: 'string', b: 'number', c$: 'null', $(val){ if(val.a){ return val.c !== undefined }else{ return true } } } ``` ##### 使用字符串[]来描述数组中的类型 ```javascript /* array[number]规则表示{ $: 'array', $subItem: 'number' } 的语法糖 */ validator.v([12, 13, 12343], 'array[number]') ``` #### 递归验证的例子 ```javascript validator.addPresetRule('person', { name: 'truthyString', age: 'number', children$: 'array[person]$' }) validator.addPresetRule('people', 'array[person]') const data = [{ name: '龙一', age: 55, children: [{ name: '龙二', age: 32 }] }, { name: '落一', age: 45, children: [{ name: '落二', age: 12 }] }] validator.v(data, 'people') ``` #### 转义$ ```javascript validator.v({ a$: 1, }, { a$$: 'number', })// Promise.resolve(true) await validator.v({ $: 1, }, { $$: 'number', })// Promise.resolve(true) !await validator.v({ $listItem: 1, }, { $$listItem: 'string', })// Promise.resolve(false) ```