微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

yup.js 多个测试验证器

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?