yup.js 多个测试验证器

问题描述

我有验证器的自定义方法

export function required(value: any) {
  const { path,createError } = this;
  if (value === null || value === undefined || !value) {
    return createError({ path: path,message: 'common.required-error.key' });
  }
  return true;
}


export function email(value: string) {
  const regex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  const testResult = regex.test(String(value).toLowerCase());
  const { path,createError } = this;

  if (!testResult) {
    return createError({ path: path,message: 'common.email-error.key' });
  }

  return true;
}

这些是我用来验证输入字段的方法 自定义表单组件和控件

<Form validators={{ control1: required,control2: [required,email]  }} submitHandler={submit}>
          <FormControl type="text" formControlName="control1"></FormControl>
          <FormControl type="email" formControlName="control2"></FormControl>
        </Form>

在使用库的 Form.tsx 组件中,我创建了我的测试函数方法

const { register,handleSubmit,formState,getValues } = useForm({
    resolver: yupResolver(buidlValidators(validators,t)),// mode: 'onChange',// reValidateMode: 'onChange',});


function buidlValidators(validators: Record<string,yup.TestFunction | yup.TestFunction[]>,t: (key: string) => any) {
  const result = {};

  for (const key in validators) {
    const value = validators[key];
    if (Array.isArray(value)) {
      result[key] = functionСhain(value,key);
    } else {
      result[key] = yup.mixed().test(value.name,null,value);
    }
  }

  console.log({ buidlValidators: result })
  return yup.object().shape(result);
}





function functionСhain(functions: yup.TestFunction[],name: string) {
  let validator = yup.mixed();
  for (const value of functions) {
    validator = validator.test(value.name,value);
  }
  return validator;
}

但我收到此错误

control1: {message: "common.required-error.key",type: "required",ref: input}
control2: {message: "common.required-error.key",ref: input}

但我想得到这样的东西

control1: {message: "common.required-error.key",ref: input}
control2: {message: ["common.required-error.key","common.email-error.key"],ref: input}

我想了解如何正确执行以获得我想要的结果

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...