async-validator
本文档记录版本:v3.3.0
概述
表单异步验证,github: async-validator
安装:
npm i async-validator -S
基本使用
这里使用了 Vue 的方式:
<template> <input v-model="form.name"> <p>{{message.name}}</p> <input v-model="form.age"> <p>{{message.age}}</p> <button @click="submit">submit</button></template>
import Schema from 'async-validator'let validator = nullexport default { data () { return { // 表单对象 form: { name: '张三', age: '18' }, // 校验规则 rules: { name: { // 一条校验规则 required: true, message: '姓名为必填项' }, age: [ // 多条校验规则 { required: true, message: '年龄为必填项' }, { validator (rule, value, callback) { value < 18 ? callback(new Error('未成年人不符合条件')) : callback() } } ] }, // 错误提示 message: { name: '', age: '' } } }, created () { // 实例化构造函数表示创建一个校验器,参数为校验规则对象 validator = new Schema(this.rules) }, methods: { // 提交 submit () { validator.validate(this.form, { firstFields: true }).then(() => { // 校验通过 this.clearMessage() console.log('ok') }).catch(({ errors }) => { // 校验未通过 // 更新目前的校验错误提示 this.clearMessage() for (let { field, message } of errors) this.message[field] = message }) }, // 清空校验错误提示 clearMessage () { for (let key in this.message) this.message[key] = '' } }}
rules
校验规则,每个校验属性对应要校验的表单对象
type
{String}:内置校验类型,可选值如下string
:必须是 string 类型,默认类型number
:必须是 number 类型boolean
:必须是 boolean 类型method
:必须是 function 类型regexp
:必须是 regexp 类型integer
:必须是整数类型float
:必须是浮点数类型array
:必须是 array 类型object
:必须是 object 类型enum
:必须出现在enmu
指定的值中date
:必须是 date 类型url
:必须是 url 类型hex
:必须是 16 进制类型email
:必须是 email 类型any
:任意类型
required
{Boolean}:是否必填pattern
{Regexp}:需要符合的正则min
{Number}:最小值,对于字符串和数组会与length
比较,对于数字会直接与值比较max
{Number}:最大值,比较规则同上len
{Number}:指定长度,比较规则同上,优先级高于min
和max
enum
{Array}:指定的值,配合type: 'enum'
使用whitespace
{Boolean}:是否值不能都是空格fields
{Object}:嵌套规则,必须在父规则上指定required
,否则不会校验defaultField
{Object/Array}:fields
属性的扩展,校验object
和array
类型中所有的值transform
{Function}:校验前对值进行转换,函数的参数为当前值,返回值为改变后的值message
:校验提示信息,可以任意类型,例如 string、JSX、函数的返回值validator
{Function}:自定义校验函数,参数依次如下rule
:当前校验字段在 rules 中所对应的校验规则value
:当前校验字段的值callback
:校验完成时的回调,传入Error
或ErrorArray
表示校验失败,不传即为成功- 如果校验是同步的直接返回
false
或Error/ErrorArray
也可以
- 如果校验是同步的直接返回
source
:校验对象options
:配置项,属性如下messages
:校验错误提示信息,会被合并到默认的提示信息中
asyncValidator
{Function}:自定义异步校验函数,参数同validator
validate 方法
校验方法:
function (source, [options], callback): Promise
source
{Object}:需要校验的对象options
{Object}:配置项first
{Boolean}:第一个未通过校验的字段发生错误就调用callback
,即不再继续校验剩余字段firstFields
{Boolean/StringArray}:多条校验规则的配置- Boolean:每个字段的第一个规则发生错误就调用
callback
,即不再继续校验该字段的剩余规则 - StringArray:指定字段的第一个规则发生错误就调用
callback
- Boolean:每个字段的第一个规则发生错误就调用
suppressWarning
{Boolean}:是否禁止无效值的内部警告
callback(errors, fields)
{Function}:校验完成时的回调,若errors
存在表示校验失败,否则校验成功
返回的 Promise:
then()
:校验通过的回调catch({ errors, fields })
:校验失败的回调errors
{Array}:所有校验错误的Error
数组fields
{Object}:所有校验错误的对象,键名为校验字段名,键值为Error
数组
messages 方法
async-validator
内部有些内置常用的英语校验提示,如果不指定校验规则中的 message
,默认就是使用内置的英语提示
使用 messages
方法可以自定义默认校验提示,%s
为校验的字段名,所有可修改的字段见项目源码 src/messages.js
validator.messages({ required: '%s 必填'})
FAQ
如何关闭校验错误时的控制台警告
Schema.warning = () => {}
如何校验值为 true
{ type: 'enum', enum: [true]}