【问题标题】:Yup Validation With Multiple Condition based on other field value是的,基于其他字段值的多重条件验证
【发布时间】:2021-04-10 03:07:04
【问题描述】:

当“性别”字段值是其他人或女性时,我必须验证“描述”字段,但当它是男性时,“描述”字段不需要验证。

首先我想展示这段代码,这是有效且有效的:

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')
})

但它不起作用。请给我一个解决方案。提前谢谢...

【问题讨论】:

  • 您要验证什么值?有没有错误? “但它不工作”请提供更多关于什么不工作的信息。
  • 你不能这样做 gender=== 'others' || 'female' 因为 Boolean || "female" 不是你所期望的我想。相反:使用/^others|female$/.test(gender)
  • @RokoC.Buljan 当性别字段值为女性或其他人时,我需要验证描述字段,但是当性别字段值为男性时,则没有验证申请描述字段
  • @evolutionxbox 我需要在性别字段值为其他或女性时验证描述,否则不需要验证,但是当我尝试使用第二个代码时,sn-p 只检查第一个值('其他'),或操作员条件不起作用。我认为是的不接受这一点,但我该如何解决这个问题

标签: javascript reactjs yup


【解决方案1】:

首先对等式运算进行评估。

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" ,

【讨论】:

  • 另一种解决方案也可以是['others','female'].includes(gender)
  • @evolutionxbox 是的。添加。谢谢
  • 感谢@RokoC.Buljan
猜你喜欢
  • 2015-07-24
  • 1970-01-01
  • 2018-01-12
  • 2017-09-08
  • 1970-01-01
  • 2011-08-27
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多