Closed skchen28 closed 3 years ago
可以通过 addRule
自定义添加校验规则, 参考示例:
const myModel = SchemaModel({
field1: StringType().addRule((value) => {
if(value==='root'){
return {
hasError: true,
errorMessage:'不能是关键字 root'
}
}else if(!/^[a-zA-Z]+$/.test(value)){
return {
hasError: true,
errorMessage:'只能是英文字符'
}
}
return {
hasError: false
}
})
});
你这是一个字段,而我说的是两个字段之间的关联性校验
// 把你的证件类型存在变量中
let formData = {
certificateType: '' // '身份证' | '驾驶证' | ...;
};
const myModel = SchemaModel({
field1: StringType().addRule(value => {
if (formData.certificateType === '身份证') {
// 处理你的逻辑
}
return {
hasError: false
};
})
});
@skchen28 改进了多字段交叉验证的处理
const schema = SchemaModel({
password1: StringType().isRequired('This field required'),
password2: StringType().addRule((value, data) => {
if (value !== data.password1) {
return false;
}
return true;
}, 'The passwords are inconsistent twice')
});
schema.check({ password1: '123456', password2: 'root' });
/**
{
password1: { hasError: false },
password2: {
hasError: true,
errorMessage: 'The passwords are inconsistent twice'
}
};
**/
https://github.com/rsuite/schema-typed#custom-verification---multi-field-cross-validation
我这里有一个通用的需求,比如证件类型为“身份证”时,才对身份证进行合法性校验,这个时候我应该怎么做呢?