是的和 Formik 用法 .match()

Yup and Formik usage .match()

密码:Yup.string().required('Please Enter your password').matches(/^(?=.\d)(?=.[ !@#$%^&])(?=.[a-z])(?=.*[A-Z]).{8,}$/, 'test') .required("需要密码"),

这里有人知道为什么 .matches 不会返回错误消息吗?我真的不想 运行 一堆 .test() 来满足我们想要满足的每个标准。

这似乎是 Yup 的一个持续问题,解决方法对我们在代码中的设置方式没有意义

我收到了所需的消息,但我希望 .match() 中的消息在未满足时显示

const formik = useFormik({
    initialValues: { username: '', password: '', firstName: '', lastName: '' },
    onSubmit: (values) => {
        dispatch(checkLogin({
            username: values.username,
            password: values.password
        }, async () => {
            return await router.push("/");
        }));
        setSubmitted(true);
    },
    validationSchema: Yup.object({
        username: Yup.string().email("Must be a valid email").required("Email is 
 required"),
        password: Yup.string().required('Please Enter your password').matches(/^(? 
 =.*\d)(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/, 'test').required("Password is 
 required"),
        firstName: Yup.string().matches(/^([^0-9]*)$/).required("First name is 
 required"),
        lasstName: Yup.string().matches(/^([^0-9]*)$/).required("First name if 
 required")

    }),
});

原来你的正则表达式有一些不需要的间距。删除它,它应该可以工作。

您有两个必需的检查,尝试删除一个,它应该可以工作

password: Yup.string()
   .required('Please Enter your password')
   .matches(/^(?=.*\d)(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/, 'test')

此外,您似乎需要添加 .shape https://github.com/jquense/yup#objectshapefields-object-nosortedges-arraystring-string-schema

Yup.object().shape({})