我有一個經過 Yup 驗證的 Formik 表格。我的問題是所有三個欄位,我們稱之為Field1, Field2, 和Field3(都是字串),默認情況下都是可選的,但如果填寫了其中任何一個,則所有這些欄位都是必需的。
我的驗證架構會是什么樣子來完成這項作業
我已經有了另外兩個欄位的起點,其中一個欄位已填寫,另一個不再需要,但必須始終填寫其中一個欄位,如下所示:
field4: Yup.string()
.ensure()
.when('field5', {
is: '',
then: Yup.string().required('Please fill out Field4 or Field5'),
}),
field5: Yup.string()
.ensure()
.when('field4', {
is: '',
then: Yup.string().required(''),
}),
uj5u.com熱心網友回復:
在yup您可以根據使用其他值檢查when像你一樣有field4和field5。而且您實際上可以同時收聽多個領域。
你必須小心回圈依賴
有一些使用引數 noSortEdges 的解決方案,但沒有太多檔案圍繞它。你可以在這里找到它的測驗。
所以一個可能的解決方案是:
const schema = yup.object().shape(
{
field1: yup.string().when(["field2", "field3"], {
is: (a, b) => a !== undefined || b !== undefined,
then: yup.string().required("Please fill out Field1, Field2 or Field3")
}),
field2: yup.string().when(["field1", "field3"], {
is: (a, b) => a !== undefined || b !== undefined,
then: yup.string().required("Please fill out Field1, Field2 or Field3")
}),
field3: yup.string().when(["field1", "field2"], {
is: (a, b) => a !== undefined || b !== undefined,
then: yup.string().required("Please fill out Field1, Field2 or Field3")
})
},
[["field1", "field2"], ["field1", "field3"], ["field2", "field3"]]
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/397657.html
標籤:javascript 反应 打字稿 验证 对
上一篇:Spring:DTO檔案大小驗證
