// ruleSet must be an Object Array
const ruleSet = [
{
name: 'Email', // rule should have a unique name
// set of rules will be checked in order
rules: ['required', 'email && contain:gmail.com, qq.com', 'size:32'],
// tips are one-to-one of the rules, but you can set only one tip like 'Price'
tips: ['Required...', 'Not a valid Email', 'Email address too long']
},
{
name: 'Price',
rules: ['required', 'lt:5000'],
// 当错误消息只有一个时,会当成默认信息
tips: ['Common Mes: Error occur']
}
]
const validator = new Validator(ruleSet)
// or
// const validator = new Validator()
// validator.use(ruleSet)
console.log(validator.check('', 'Email'))
// => {isError: true, isPass: false, name: 'Email', tip: 'Required...'}
console.log(validator.check('some@some', 'Email'))
// => {isError: true, isPass: false, name: 'Email', tip: 'Not a valid Email'}
console.log(validator.check('Iamveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@gmail.com', 'Email'))
// => {isError: true, isPass: false, name: 'Email', tip: 'Email address too long'}
console.log(validator.check('hwenleung@gmail.com', 'Email'))
// => {isError: false, isPass: true, name: 'Email'}
最近基于自己的使用习惯和经验,写了个验证器。可以在浏览器端和 Node 环境下使用。
但这种验证器已经有非常多轮子了。。。没有特色是不行的。。。
这个验证器的特色:
1.
内置规则以及可扩展规则
2.
可以使用逻辑操作符
3.
支持一组检验规则,哪里错误就提示那里
4.
小巧并且可扩展,可以用多种形式封装。
5.
单元测试 100% 覆盖绿
我自己就封装了个 forms-validator,本来还想用 vue 封装个的工具的,但没时间就暂时坑了
下面来简单介绍下,不过只介绍了部分功能。全部功能介绍,请看文档。
问题
先考虑下下面的场景
1.我们要判断,一个小于
20
或者大于60
同时还必须为素数
的数字2.校验邮箱地址
32
个字符。如果超过了,提示‘邮箱地址太长’('Email address too long')开始
先安装
然后
内置规则以及可扩展规则
详细内置规则列表,见文档
比如这里我扩展了三条规则(合理扩展规则可以减少项目代码量)
使用
validator.registerRules
方法来进行扩展使用逻辑操作符
我们还是
接上面的例子
。可以使用的逻辑操作符有&&
,||
还有括号()
操作符不仅可以对内置规则使用,还可以对扩展的规则使用。还可以在
一组校验规则
时使用(合理运用会非常强大,下面例子会说到)。比如说,
email
),是合法的,而且只支持 Gmail 和 QQ 邮箱,其他不支持20
或者大于60
同时还必须为素数
的数字支持一组检验规则,哪里错误就提示那里
继续
接上面的例子
。考虑以下情景:我们有一个输入邮箱地址的输入框。
32
个字符。如果超过了,提示‘邮箱地址太长’('Email address too long')另外我还要校验一个价格,无论他有什么错我都提示,‘通用的错误提示’('Common Mes: Error occur')
那么就可以用下面的代码来实现 (ruleSet)
注意,使用一组检验规则(ruleSet)时,要用
validator.check
而不是validator.test
。test
是对单个规则用的。最后
详细的文档及项目源码,在这里