是的,如果值以 0 开头,则不会触发错误
Yup don't trigger the error if value typing starts with 0
基本上,我有一个字段需要像这样验证:
export const validationSchemaWithdraw = Yup.object().shape({
amount: Yup.number()
.min(1, 'The minimum amount is one')
.typeError('The amount invalid')
.required('The amount is required'),
});
如果我键入等于 0 的金额,则会触发错误。但如果值为 01,则什么也不会发生。
如果输入的值以 0 开头,我的字段如何触发错误?
由于您在 yup 模式上将值类型定义为 number
,因此输入值将在验证前转换为数字。像“01”这样的值将被解析为 1,这根据您的验证链是有效的。
实现您期望的行为的一种方法是向您的验证链添加自定义 test
函数并测试前导零案例。这需要访问字段的原始值 作为字符串 (在被 yup 强制转换为数字之前),否则前导零将被解析忽略。所以请确保您输入字段的类型是“字符串”。
const SignupSchema = Yup.object().shape({
amount: Yup.number()
.min(1, 'The minimum amount is one')
.typeError('The amount invalid')
.required('The amount is required')
.test(
'no-leading-zero',
'Leading zero is not allowed',
(value, context) => {
return context.originalValue && !context.originalValue.startsWith('0');
}
),
});
另一种选择是将架构中的值类型更改为 string
并使用 matches
+ 正则表达式检查字符串格式。
基本上,我有一个字段需要像这样验证:
export const validationSchemaWithdraw = Yup.object().shape({
amount: Yup.number()
.min(1, 'The minimum amount is one')
.typeError('The amount invalid')
.required('The amount is required'),
});
如果我键入等于 0 的金额,则会触发错误。但如果值为 01,则什么也不会发生。
如果输入的值以 0 开头,我的字段如何触发错误?
由于您在 yup 模式上将值类型定义为 number
,因此输入值将在验证前转换为数字。像“01”这样的值将被解析为 1,这根据您的验证链是有效的。
实现您期望的行为的一种方法是向您的验证链添加自定义 test
函数并测试前导零案例。这需要访问字段的原始值 作为字符串 (在被 yup 强制转换为数字之前),否则前导零将被解析忽略。所以请确保您输入字段的类型是“字符串”。
const SignupSchema = Yup.object().shape({
amount: Yup.number()
.min(1, 'The minimum amount is one')
.typeError('The amount invalid')
.required('The amount is required')
.test(
'no-leading-zero',
'Leading zero is not allowed',
(value, context) => {
return context.originalValue && !context.originalValue.startsWith('0');
}
),
});
另一种选择是将架构中的值类型更改为 string
并使用 matches
+ 正则表达式检查字符串格式。