export default()

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);
}