async-validator 是個純 js 庫,能夠對數據進行異步校驗。async-validator
是基於早期的 async-validate 進行修改的,可是早期出現的 async-validate
並無獲得更多的人使用,反而基於它作了修改的 async-validator
引發不少人的關注並使用,目前 star 數在 5.2K
左右,對於表單驗證可謂是至關的好用。一直好奇 ant.design
中 Form
的表單檢驗是怎麼作的。而後抱着學習的態度去 github 上找了下,而後發現了它,這個做者也是優秀的嘞。vue
ant.design form 使用了 rc-form 封裝了 Form
組件,而 rc-form
中使用了 async-validator
插件對錶單進行的校驗。 element-ui 中也是使用了 async-validator
作的表單驗證。react
import schema from 'async-validator';
let descriptor = {
name: {
type: "string",
required: true,
validator: (rule, value) => value === 'muji',
},
age: {
type: "number",
asyncValidator: (rule, value) => {
return new Promise((resolve, reject) => {
if (value < 18) {
reject("too young"); // reject with error message
} else {
resolve();
}
});
}
},
address: {
validator(rule, value, callback){
return value === 'test';
},
message: 'Value is not equal to "test".',
}
};
let validator = new schema(descriptor);
validator.validate({name: "muji"}, (errors, fields) => {
if(errors) {
// validation failed, errors is an array of all errors
// fields is an object keyed by field name with an array of
// errors per field
return handleErrors(errors, fields);
}
// validation passed
});
// PROMISE USAGE
validator.validate({ name: "muji", age: 16 }).then(() => {
// validation passed or without error message
}).catch(({ errors, fields }) => {
return handleErrors(errors, fields);
})
複製代碼
required
表示該字段是否必填git
whitespace
表示輸入的字符串前面是否容許出現多個(一個以上)連續的空格github
類型 type
正則表達式
表示容許該字段接收值的類型element-ui
integer
-- 整形float
-- 浮點型array
-- 數組regexp
-- 正則表達式object
-- 對象method
-- 函數 functionemail
-- 郵箱number
-- 數字date
-- 日期 new Date()url
-- 網址hex
-- 十六進制數區間 range
數組
表示該字段接受值的長度,容許的最小最大數值區間異步
length
-- 固定長度min
-- 最小值max
-- 最大值range
-- [最小值, 最大值]枚舉 enum
async
枚舉容許該字段的值,至少符合其中一個函數
pattern
經過正則表達式匹配該字段接收值是否符合要求