【发布时间】:2021-09-14 18:35:12
【问题描述】:
我正在使用yup 进行验证,并且我想尝试这种惊人的cast 方法,但是从文档中不清楚,如果失败,我如何获得错误消息? cast 要么转换并验证并返回结果,要么返回 null 就是这样。这是不可接受的 - 我还需要一条错误消息。同时我不想运行它两次,比如 - 一次用于验证,一次用于强制转换。
【问题讨论】:
标签: javascript validation casting joi yup
我正在使用yup 进行验证,并且我想尝试这种惊人的cast 方法,但是从文档中不清楚,如果失败,我如何获得错误消息? cast 要么转换并验证并返回结果,要么返回 null 就是这样。这是不可接受的 - 我还需要一条错误消息。同时我不想运行它两次,比如 - 一次用于验证,一次用于强制转换。
【问题讨论】:
标签: javascript validation casting joi yup
强制转换和验证并返回结果或返回 null 就是这样
cast 不 validate 结果 - 它只是转换它。 validate(Sync)/isValid(Sync) 强制转换然后验证。
如果您想在强制转换失败的情况下提供有关特定架构的错误消息,请使用typeError
同时我不想运行它两次,比如 - 一次用于验证,一次用于强制转换。
正如我所说,验证方法总是在验证之前先运行转换(如果转换失败,则不会运行验证)。如果您想要强制转换和验证功能,那么您只需调用验证方法并返回 cast 结果(如果有效) - 您不需要调用 cast 除非您只想强制转换(不验证)。
【讨论】:
Returns the value (a cast value if isStrict is false) if the value is valid, and returns the errors otherwise. yup readme
您可以随时抛出验证错误。
这是我的完整实现:
phone: yup
.string()
// .test('is-valid', 'phone.invalid', async (value) => {
// if (typeof value === 'string') {
// const number = phoneUtil.parseAndKeepRawInput(value, 'TR');
// return phoneUtil.isValidNumber(number);
// }
// return false;
// })
.transform((value) => {
if (typeof value === 'string') {
const number = phoneUtil.parse(value, 'TR');
if (phoneUtil.isValidNumber(number)) {
return phoneUtil.format(number, PhoneNumberFormat.E164);
}
}
throw new ValidationError(
new ValidationError('phone.invalid', value, 'phone', 'is-valid')
);
})
.required()
.nullable(false),
【讨论】: