使用变量正则表达式测试对两个相关字段进行验证
Validation with two related fields with variable regex test
所以我有一个世界范围内的国家/地区列表,我想验证欧盟国家/地区的增值税/税号。
这是 countries array
的示例:
{
name: "Belarus",
dialCode: "+375",
code: "BY"
},
{
name: "Belgium",
dialCode: "+32",
code: "BE",
EU: true,
vatPrefix: "BE",
regex: `0[0-9]{9}`
},
...
我有 countries
和 tax number
字段,但到目前为止我无法区分一个国家/地区是否来自欧盟。
这是我的验证码(无效):
return Yup.string().when("???", {
is: "EU",
then: schema.test("regexPattern", t("validation.invalidValue"), (value: unknown) =>
regexPattern.test(String(value))
),
otherwise: Yup.string()
.trim()
.min(5, t("validation.minLength", { minLength: 5}))
.required(t("validation.required"));
});
我试图从 countryField
获取 countryCode
并以此查询 countries array
如果它有一个正则表达式然后将变量传递给正则表达式验证.但是我不知道该怎么做。
这与 this question 非常相似,但我们的方法完全不同,因为我还需要处理欧盟以外的国家/地区。
好吧,显然我遗漏了一些可以在这里使用的功能!
这是我的解决方案:
Yup.string().when("countryCode", {
is: value => {
const country = getCountryBy.code(value);
return country?.EU;
},
then: validateAgainstRegexps(getEuCountries.regex()),
otherwise: Yup.string()
.trim()
.min(genericTaxIdMinLength, t("validation.minLength", { minLength: genericTaxIdMinLength }))
.required(t("validation.required"))
});
我需要做的就是在 .when()
中添加逻辑,如 here 所述:is: (value) => value == true
我认为它只接受等式 (===)
.
所以我有一个世界范围内的国家/地区列表,我想验证欧盟国家/地区的增值税/税号。
这是 countries array
的示例:
{
name: "Belarus",
dialCode: "+375",
code: "BY"
},
{
name: "Belgium",
dialCode: "+32",
code: "BE",
EU: true,
vatPrefix: "BE",
regex: `0[0-9]{9}`
},
...
我有 countries
和 tax number
字段,但到目前为止我无法区分一个国家/地区是否来自欧盟。
这是我的验证码(无效):
return Yup.string().when("???", {
is: "EU",
then: schema.test("regexPattern", t("validation.invalidValue"), (value: unknown) =>
regexPattern.test(String(value))
),
otherwise: Yup.string()
.trim()
.min(5, t("validation.minLength", { minLength: 5}))
.required(t("validation.required"));
});
我试图从 countryField
获取 countryCode
并以此查询 countries array
如果它有一个正则表达式然后将变量传递给正则表达式验证.但是我不知道该怎么做。
这与 this question 非常相似,但我们的方法完全不同,因为我还需要处理欧盟以外的国家/地区。
好吧,显然我遗漏了一些可以在这里使用的功能!
这是我的解决方案:
Yup.string().when("countryCode", {
is: value => {
const country = getCountryBy.code(value);
return country?.EU;
},
then: validateAgainstRegexps(getEuCountries.regex()),
otherwise: Yup.string()
.trim()
.min(genericTaxIdMinLength, t("validation.minLength", { minLength: genericTaxIdMinLength }))
.required(t("validation.required"))
});
我需要做的就是在 .when()
中添加逻辑,如 here 所述:is: (value) => value == true
我认为它只接受等式 (===)
.