为什么Yup校验中的number().min()方法无法正常生效?
amount字段校验不生效排查方案
- 输入值类型不匹配
Yup的number()规则默认会尝试做类型转换,但如果你的表单输入的amount是无法转换为数字的字符串(比如包含字母、特殊符号),或者你用的输入框默认返回字符串类型值(比如原生type="text"的input),会先触发类型校验失败,后续的min、positive规则就不会执行。
解决方法可以加类型错误提示,或者提前把值转为数字再提交校验:
const validationSchema = Yup.object().shape({ asset: Yup.string().required("必填!"), amount: Yup.number() .typeError("请输入合法数字") .required("必填") .min(5, "必须大于5") .positive(), });
- 校验触发逻辑配置问题
如果搭配Formik等表单库使用,默认可能仅在表单提交时校验全量字段,或者配置了仅字段被触摸(touched)后才展示错误。可以检查是否正确触发了amount字段的校验,以及是否正确读取了该字段的错误信息做展示。 - 字段名不匹配
检查表单提交的对象中,对应数字字段的key是否和schema中声明的amount完全一致,排查拼写、大小写错误。 - 规则边界误判
你声明的min(5)规则要求数值≥5,positive()要求数值必须为正,0、负数、小于5的正整数都会触发校验失败,注意不要误判为规则未生效。
内容的提问来源于stack exchange,提问作者Clancinio
相关产品推荐
相关产品推荐

