Formik验证模式Yup,何时为“答案”或“另一个答案”

问题描述

    //Basicaly all I want to do is say is if region = "Europe" or "other" then the field is required,did go through the formik documentation but not finding anything.
   Am also new to formik so dont kNow if this is a nube question or not

<Formik
                enableReinitialize={true}
                initialValues={{
                    name: currentBankData.name || '',address: currentBankData.address || '',country: currentBankData.country || '',region: currentBankData.region || '',city: currentBankData.city || '',swiftCode: currentBankData.swiftCode || '',routeCode: currentBankData.routeCode || '',}}
                validationSchema={Yup.object().shape({
                    name: Yup.string().min(3).required('Name is required.'),address: Yup.string().required('Address is required.'),country: Yup.string().required('Country is required.'),region: Yup.string().required('Region is required.'),city: Yup.string().required('City is required.'),swiftCode: Yup.string().when('region',{
                        is: 'Europe' || 'other,//Would like to do something like this but 
                                                     doesnt work :)

                        then: Yup.string()
                            .required('SwiftCode is required.')
                            .matches(
                                /[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?/i,'This is not the correct Swift Code'
                            ),}),routeCode: Yup.string().when('region',{
                        is: 'USA',then: Yup.string().required('RouteCode is required.'),verified: Yup.bool(),})}

/ 该数据无误 / 看起来您的帖子大部分是代码;请添加更多详细信息。 看起来您的帖子大部分是代码;请添加更多详细信息。 看起来您的帖子大部分是代码;请添加更多详细信息。 看起来您的帖子大部分是代码;请添加更多详细信息。 看起来您的帖子大部分是代码;请添加更多详细信息。 看起来您的帖子大部分是代码;请添加更多详细信息。

解决方法

使用混合器oneOf尝试

validationSchema={Yup.object().shape({
                    name: Yup.string().min(3).required('Name is required.'),address: Yup.string().required('Address is required.'),country: Yup.string().required('Country is required.'),region: Yup.string().required('Region is required.'),city: Yup.string().required('City is required.'),swiftCode: Yup.string().when('region',{
                        is: oneOf(['Europe','Europe','other'] as const),then: Yup.string()
                            .required('SwiftCode is required.')
                            .matches(
                                /[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?/i,'This is not the correct Swift Code'
                            ),}),routeCode: Yup.string().when('region',{
                        is: 'USA',then: Yup.string().required('RouteCode is required.'),verified: Yup.bool(),})}

,
    Finally Works
validationSchema={Yup.object().shape({
                    name: Yup.string().required('Name is required.'),(region,schema) => {
                        return ['Europe','other'].includes(region)
                            ? schema
                                    .required('SwiftCode is required.')
                                    .matches(
                                        /[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?/i,'This is not the correct Swift Code'
                                    )
                            : schema.matches(
                                    /[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?/i,'This is not the correct Swift Code'
                              );
                    }),verified: Yup.bool()

相关问答

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