表单提交通常需要验证用户的输入是否合法,但是验证的时机、规则千变万化,
如何优雅的实现就成了一个难题。
async-validator
原生,无依赖。
element-ui、iview,form 组件都基于这个库。
非常强大的验证库,看名字就知道支持异步,推荐使用。
github
使用方法
// 1. 定义字段规则,生成验证器
let validator = new Schema({
name: [
{ type: 'string', required: true, message: '姓名不能为空', whitespace: true },
{ min: 2, max: 4, message: '姓名为 2 ~ 4 位' },
{ message: '自定义同步验证器函数错误信息', validate : function (rule, value) { /* ... */ } },
{ message: '自定义异步验证器函数错误信息', asyncValidator: function (rule, value) { /* ... */ } },
]
})
// 2. 传入需要验证的对象进行验证,回调风格
validator.validate({ name: 'jason' }, (errors, fields) => {
// errors => 是个数组,记录着错误字段,以及消息
// fields => 是个对象,记录着错误字段,以及消息
// errors 和 fields 都代表有错误,看有那种数据结构处理更方便了
});
// 2. 传入需要验证的对象进行验证,promise 风格
validator.validate({ name: 'jason' })
.then(() => {})
.catch(({ errors, fields }) => {
// errors => 是个数组,记录着错误字段,以及消息
// fields => 是个对象,记录着错误字段,以及消息
// errors 和 fields 都代表有错误,看有那种数据结构处理更方便了
});
注意
- whitespace 的作用是,是否将仅包含空格的字符串视为错误的。
- 一个字段可以包含多个验证(数组),这个好处是可以定义多个 message 来响应不同的错误。
- 不支持 script 方式引入使用。。
vee-validate(vue)
理论上支持所有的 ui 库
支持异步验证(通过手动 setErrors 的方式)
github
使用方法
待下次使用后记录。