簡體   English   中英

是的,基於其他字段值的多條件驗證

[英]Yup Validation With Multiple Condition based on other field value

當“性別”字段值為其他或女性時,我必須驗證“描述”字段,但當它是男性時,“描述”字段不需要驗證。

首先,我想展示這段代碼,這是有效且有效的:

description: Yup.string().when(['gender'], {
 is: (gender) => gender=== 'others',
 then: Yup.string().required('Description is Required')
})

但是現在我必須使用這樣的多個條件:

description: Yup.string().when(['gender'], {
 is: (gender) => gender=== 'others' || 'female' ,
 then: Yup.string().required('Description is Required')
})

但它不起作用。 請給我一個解決方案。 提前致謝...

首先評估平等操作。

is: (gender) => gender === 'others' || 'female' ,   // Not good

變成:

is: (gender) => (Boolean) || 'female',

如果<Boolean>true ,則結果為true
如果<Boolean>false的,你會得到"female"的結果。

解決方案:
相反,使用/^(others|female)$/.test(gender)
或 @evolution 建議的['others','female'].includes(gender)

is: (gender) => /^(others|female)$/.test(gender) ,

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test

或者如果你想讓它長而明確:

is: (gender) => gender === "others" || gender === "female" ,
// in the context variable you get the full object and retrieve your value from here

.test('DOB', "Single condition error here", (value, context) => {
      const { parent } = context;
      // formatted date passing the formatted the date
      const formatedDate = moment(value).format('YYYY/MM/DD');
      // calculateBirthYear is a custom function for getting age calculated

      const selectedAge = calculateBirthYear(formatedDate);
      if (parent?.role == "3") {
        if (selectedAge >= 21 && selectedAge <= 45)
          return true
      } else if (parent?.role == "4") {
        if (selectedAge >= 18 && selectedAge <= 40)
          return true
      } else if (parent?.role == "5") {
        console.log("LINE NO 138 ", parent.role, selectedAge);
        if (selectedAge >= 18 && selectedAge <= 40)
          return true
      }
      return ctx.createError({ message: parent?.role == "3" ? Strings.sm_register.Surrogate_Mother_error : parent?.role == "4" ? Strings.sm_register.Egg_Donar_error : Strings.sm_register.Sperm_Donar_error });
    }),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM