[英]Yup Validation With Multiple Condition based on other field value
I have to validate the 'description' field when 'gender' field value is others or female but when it is male no validation required for the 'description' field.当“性别”字段值为其他或女性时,我必须验证“描述”字段,但当它是男性时,“描述”字段不需要验证。
First I want to show this code and this is valid and working:首先,我想展示这段代码,这是有效且有效的:
description: Yup.string().when(['gender'], {
is: (gender) => gender=== 'others',
then: Yup.string().required('Description is Required')
})
But Now I have to use multiple conditions like this:但是现在我必须使用这样的多个条件:
description: Yup.string().when(['gender'], {
is: (gender) => gender=== 'others' || 'female' ,
then: Yup.string().required('Description is Required')
})
But It's not working.但它不起作用。 Please Give me a solution.
请给我一个解决方案。 Thanks in advance...
提前致谢...
Equality operation is evaluated first.首先评估平等操作。
is: (gender) => gender === 'others' || 'female' , // Not good
becomes:变成:
is: (gender) => (Boolean) || 'female',
where if <Boolean>
is true
you'll get true
as result,如果
<Boolean>
为true
,则结果为true
,
and if <Boolean>
is false
you'll get "female"
as result.如果
<Boolean>
是false
的,你会得到"female"
的结果。
SOLUTION:解决方案:
Instead, use /^(others|female)$/.test(gender)
相反,使用
/^(others|female)$/.test(gender)
or ['others','female'].includes(gender)
as suggested by @evolution或 @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 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test
or if you want to make it long and explicit:或者如果你想让它长而明确:
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.