in packages/form-render/src/models/validates.ts [72:138]
export default (_schema: any, form: any, methods: any, fieldRef: any) => {
const schema = cloneDeep(_schema);
let {
format,
rules: ruleList = [],
pattern,
message,
} = schema;
const rules: any = [...ruleList];
insertRequiredRule(schema, rules);
insertLengthRule(schema, rules);
rules.push({
validator: async (_: any) => {
if (!isFunction(fieldRef?.current?.validator)) {
return true;
}
const res = await fieldRef.current?.validator();
return res;
}
});
if (pattern) {
rules.push({ pattern, message: message?.pattern });
}
if (format === 'url') {
rules.push({ type: 'url', message: message?.url });
}
if (format === 'email') {
rules.push({ type: 'email', message: message?.email });
}
if (format === 'image') {
rules.push({
validator: (_: any, value: any) => {
if (!value) {
return true;
}
const imagePattern = '([/|.|w|s|-])*.(?:jpg|gif|png|bmp|apng|webp|jpeg|json)';
const _isUrl = isUrl(value);
const _isImg = new RegExp(imagePattern).test(value);
return _isUrl || _isImg;
},
message: message?.email ?? '请输入正确的图片格式'
});
}
if (format === 'color') {
rules.push({
validator: (_: any, value: any) => {
try {
Color(value || null); // 空字符串无法解析会报错,出现空的情况传 null
return true;
} catch (e) {
return false;
}
},
message: message?.color ?? '请填写正确的颜色格式'
});
}
return transformRules(rules, methods, form);
}