我具有以下架构
validationSchema={yup.object().shape({
firstName: yup
.string()
.required("Name cannot be empty")
.matches(NAME_REGEX, "Name can only contain english characters"),
lastName: yup
.string()
.required("Name cannot be empty")
.matches(NAME_REGEX, "Name can only contain english characters"),
location: yup
.object()
.nullable()
.shape({
country: yup.string().required(),
state: yup.string().required(),
city: yup.string().required()
})
})}
对firstName
和lastName
的验证工作正常,但我不知道如何验证location
。
要求:完全不需要填写location
。但是,如果该字段的任何内容(country
/ state
,city
)都已填写,则必须全部填写三个。要么全部要么全不。
尽管我尝试如上所述进行验证,但无法正常工作。
另一个验证要求是:从select
html元素中选择这些值,其中第一个<option>
是<option key={0}>-select-</option>
。因此,我不希望我的用户也选择此选项。到目前为止,我正在onSubmit
中通过检查这些值来处理它,如果它们包含-select-
,则将不考虑这些值,并将其替换为现有的值。
更新:
location
永远不能为null。如果用户尚未设置任何位置字段,则location
也将是:
location: {
country: null,
state: null,
city: null
}
location
永远不能为null,只有其属性可以为空。
我应该如何进行这些验证?
答案 0 :(得分:1)
您必须使用mixed.default(value)将SELECT md.*, v.LastFirst
FROM MST_MEMBER_DEMOGRAPHICS md CROSS JOIN
(VALUES (md.LastName + md.FirstName)) v(LastFirst)
WHERE md.GroupID = 'abcCompany' AND
md.PersonType = 'D' AND
v.LastFirrst IN ('LastName1FirstName1', 'LastName2FirstName2', 'LastName3FirstName3',.....etc)
的默认值设置为null,如下所示:
location
更新:
location永远不能为null,只有其属性可以为空。
您可以这样做:
location: yup
.object()
.default(null)
.nullable()
.shape({
country: yup.string().required(),
state: yup.string().required(),
city: yup.string().required()
})