批量验证器
- 批量验证表单字段
- 内置常用的验证器
- 支持自定义标签
- 支持自定义验证器
- 支持自定义错误信息
- 支持错误信息国际化
npm install form-batch-validator --save
const Validator = require('form-batch-validator');
const validator = new Validator();
const obj = { ... };
const rules = { ... };
let res = validator.validate(rules, obj);
- 在 error_i18n 下,新建错误信息对应的语言文件
- 实例化的时候,将对应语言文件名传入对象中
- 框架本身自带两种语言(zh_cn、en_us),默认语言为 zh_cn
// touch i18n.js
const Validator = require('form-batch-validator');
const validator = new Validator({ lang: 'en_us' });
- 使用 label(eg:用户名) 指定待检测属性的标签,如果未定义,则使用属性名(eg:username)代替
const rules = {
usernmae: {
label: '用户名'
rules: { ... }
}
}
- 使用 msg 指定待检测属性的自定义错误信息
- 在错误信息中,将使用 label 的值来替换 "${label}",把标签带入到具体的错误中
- 内置验证器都有默认的错误信息,如果不符合开发者的需求,可以使用自定义错误信息,或配置全局的错误信息语言文件,来替换掉默认的提示
const rules = {
gender: {
label: '性别',
rules: [
{ type: 'required' },
{ type: 'in', rules: ['male', 'female', 'unknown'], msg: '${label}只能是男/女/未知' },
]
}
}
- 内置的验证器不满足需求时,允许用户自定义验证器
- addValidator,第一个参数为验证器类型(名称唯一),在定义验证规则的时候,通过该参数指定使用的验证器
- addValidator,第二个参数为一个回调方法,在回调方法实现验证逻辑
// 自定义验证器
validator.addValidator('a', (label, rule, obj) => {
if (obj != 'a') {
return rule.msg ? rule.msg : '[' + label + '] ' + 'shoud be equal a'
}
});
// 使用验证器
const rules = {
attribute: { type: 'a' }
}
- requiredValidator
- stringValidator
- intValidator
- numberValidator
- inValidator
- lengthValidator
- rangeValidator
- regexValidator
- dateValidator
- timeValidator
- datetimeValidator
- emailValidator
- urlValidator
- mobileValidator
- objectValidator
- arrayValidator
- 必填验证器
- 被验证字段为空值,将返回错误
- 被验证字段未定义 required 将被视为非必填,如果字段的值为空值,我们将忽略该字段的所有验证规则
- 0、""、{}、[]、undefined、NaN、null 都将被视为空值
const rules = {
username: {
rules: { type: 'required' }
}
}
- 字符串验证器,通常要配合其他的验证器
const rules = {
username: {
rules: [
{ type: 'string' },
{ type: 'length', rules: ['~', 6, 15] }
]
}
}
- 整型验证器
const rules = {
age: {
rules: { type: 'int' }
}
}
- 数值验证器
const rules = {
size: {
rules: { type: 'number' }
}
}
- 枚举验证器
const rules = {
gender: {
rules: { type: 'in', rules: ['male', 'female', 'unknown'] },
}
}
- 长度验证器,只能配合 intValidator、stringValidator、arrayValidator 来使用,如果被验证字段不是上诉类型将抛出异常
- 必须要定义 rules 数组,rules[0]定义判断类型,rules[1]定义下限,rules[2]定义上限,rules[1]、rules[2]都是闭区间
- rules[0] 取值有 ~、>、>=、=、<、<=,~ 表示区间
- 如果被检测字段是 int 型,它将被转换为 string 来检测长度
const rules = {
username: {
rules: [
{ type: 'string' },
{ type: 'length', rules: ['~', 6, 15] }
]
}
}
- 大小验证器,只能配合 intValidator、numberValidator 来使用,如果被验证字段不是上诉类型将抛出异常
- 必须要定义 rules 数组,rules[0]定义判断类型,rules[1]定义下限,rules[2]定义上限,rules[1]、rules[2]都是闭区间
- rules[0] 取值有 ~、>、>=、=、<、<=,~ 表示区间
const rules = {
size: {
rules: [
{ type: 'number' },
{ type: 'range', rules: ['>=', 36] }
]
}
}
- 正则验证器
- 必须要定义 rules 正则
const rules = {
mobile: {
rules: { type: 'regex', rules: /^[1][3,4,5,6,7,8,9][0-9]{9}$/ },
}
}
- 日期验证器,默认正则 /^\d{4}-\d{2}-\d{2}$/
- 如果默认的格式不符合,可以使用 rules 传入自定义正则进行校验
const rules = {
date: {
rules: { type: 'date' }
}
}
// 自定义正则
const rules = {
date: {
rules: { type: 'date', rules: /^\d{4}\-\d{1,2}\-\d{1,2}$/ }
}
}
- 时间验证器,默认正则 /^\d{2}:\d{2}:\d{2}$/
- 如果默认的格式不符合,可以使用 rules 传入自定义正则进行校验
const rules = {
time: {
rules: { type: 'time' }
}
}
// 自定义正则
const rules = {
time: {
rules: { type: 'time', rules: /^\d{2}:\d{2}$/ }
}
}
- 日期时间验证器,默认正则 /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/
- 如果默认的格式不符合,可以使用 rules 传入自定义正则进行校验
const rules = {
datetime: {
rules: { type: 'datetime' }
}
}
// 自定义正则
const rules = {
time: {
rules: { type: 'datetime', rules: /^\d{4}\-\d{1,2}\-\d{1,2} \d{2}:\d{2}$/ }
}
}
- 邮箱验证器,默认正则 /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:a-z0-9?.)+a-z0-9?$/i
- 如果默认的格式不符合,可以使用 rules 传入自定义正则进行校验
const rules = {
email: {
rules: { type: 'email' }
}
}
- url 验证器,默认正则 /^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:.\d{1,3}){3})(?!(?:169.254|192.168)(?:.\d{1,3}){2})(?!172.(?:1[6-9]|2\d|3[0-1])(?:.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-)[a-z\u00a1-\uffff0-9]+)(?:.(?:[a-z\u00a1-\uffff0-9]-)[a-z\u00a1-\uffff0-9]+)(?:.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:/\S)?$/i;
- 如果默认的格式不符合,可以使用 rules 传入自定义正则进行校验
const rules = {
url: {
rules: { type: 'url' }
}
}
- 中国大陆手机号验证器,默认正则 /^[1][3,4,5,6,7,8,9][0-9]{9}$/
- 如果默认的格式不符合,可以使用 rules 传入自定义正则进行校验
const rules = {
mobile: {
rules: { type: 'mobile' }
}
}
- 纯对象验证器,支持属性的递归校验
- 如果需要属性的递归校验,可以使用 rules 传入属性的验证规则
// 对象类型校验
const rules = {
object: {
rules: { type: 'object' }
}
}
// 对象属性的递归校验
const rules = {
object: {
label: '对象'
rules: {
type: 'object',
rules: {
attr1: {
label: '属性1',
rules: { type: 'string' }
},
attr2: {
label: '属性2'
rules: [
{ type: 'required' },
{ type: 'object', rules: { //... } }
]
}
// ...
}
}
}
}
- 数组验证器,支持元素校验
- 如果需要元素校验,可以使用 rules 传入元素的验证规则
// 数组类型校验
const rules = {
array: {
rules: { type: 'array' }
}
}
// 数组元素校验
const rules = {
array: {
label: '数组',
rules: {
type: 'array',
rules: {
type: 'object',
rules: {
attr1: {
label: '属性1',
rules: [ { type: 'required' }, { type: 'string'} ]
},
attr2: {
label: '属性2'
rules: { type: 'in', rules: [1, 2, 3]}
}
}
}
}
}
}