一个验证js变量的工具
features
- 支持递归的属性
- 高度自定义
- 语法简易
- 支持异步操作
Install
// 安装npm install biangavalidator
// es6; // commonjs(node.js)const Validator = ;
通过script导入时,会暴露BiangValidator
全局变量
Usages
example
基本
;let obj = id: 1 name: '张三' work: name: '老师' salary: 12000 ;;
说明:
key
结尾加上*
表示该路径必须存在,即val[key] !== undefined
- 校验规则结尾添加
?
表示在验证时会先验证是否为null
,是即通过 - 已经初始化几种校验方法。['string', 'number', 'boolean', 'object', 'array', 'null', 'completeNull', 'completeUndefined', 'function', 'any']
null
是指val == null
的验证方法completeNull
是指val === null
的验证方法completeUndefined
是指val === undefined
的验证方法any
会在任何情况返回true
.
来取值
通过;let obj = id: 1 name: '张三' work: name: '老师' salary: 12000 ;;
规则的与和或
;let obj = id: 1 name: '张三' work: name: '老师' salary: 12000 ;;
初始化Validator时自定义验证规则
;let obj = id: 1 name: '张三' children: id: 2 name: '张二' ;let person = 'id*': or:'number' 'string' 'name*': 'string' children: 'array?' //递归的情况在下面会说到//这个方法的写法与上面的对象等价{ return validator;} person: 'id*': or:'number' 'string' 'name*': 'string' children: 'array?' //递归的情况在下面会说到 ;
说明:
- 校验方法得参数说明
val
本次要校验的内容ctx
校验的环境参数- 当执行
...
遍历情况时的ctx会包含key
值或index
值 - 一般情况是整个变量
- 当执行
validator
是当前这个Validator的实例
...
遍历iterable的变量
使用;let obj = id: 1 name: '张三' children: id: 2 name: '张二' ; person: 'id*': or:'number' 'string' 'name*': 'string' children: //.表示自身 '.': 'array?' // children的每个子元素都必须满足'object'规则 '...': 'object' ;
[ ]
来扩展规则的使用
使用[ ]
在字符串中使用;let obj = id: 1 name: '张三' children: id: 2 name: '张二' ; person: 'id*': or:'number' 'string' 'name*': 'string' children: 'array[object]?' //这种方式与上面的写法等价 //等价于 /* children: { '.': 'array?', '...': 'object' } */ ;
说明:
[ ]
包住的类型object
用来验证子元素array
用来验证父元素array[object?]
表示子元素可以为null/undefined
,array[object]?
表示children本身可以为null/undeinfed
,或两者皆可同时使用
包住规则本身
;let obj = id: 1 name: '张三' children: id: 2 name: '张二' ; person: 'id*': or:'number' 'string' 'name*': 'string' children: or: 'null' 'object' //当数组中只有一个规则,则将规则验证与所有的子元素,等价于 /* children: 'array[object]' */ );
说明:
- 如果要验证数组且只验证第一个元素的情况,使用
any
,如['string', 'any']
表示该数组第一个元素为字符串,其余不验证 ['string', 'number']
则表示该数组第一个元素为字符串,第二个元素为数值,其余不验证['string']
表示验证该数组的所有子元素是否为字符串
处理递归的情况
只需要对上面的例子稍作修改即可
;let obj = id: 1 name: '张三' children: id: 2 name: '张二' ; person: 'id*': or:'number' 'string' 'name*': 'string' //可以在规则中引用自定义的规则 children: 'array[person]?' ;
在规则中返回Promise
;let obj = id: 1 name: '张三' children: id: 2 name: '张二' ; person: 'id*': or:'number' 'string' 'name*': 'string' //可以在规则中引用自定义的规则 { let _this = this; return { //3s 后返回 ; }; } ;
说明:
- 这次validate过程将会在3s后返回