如何用Zod的refine实现自定义校验,拦截'nill'值并返回指定错误?
Zod 自定义校验:处理下拉框'nill'选项的必填提示
你的核心需求是排除下拉框中值为'nill'的选项,同时返回指定错误提示。由于'nill'是长度合法的字符串,原来的min(1)校验无法识别它,这时候用Zod的refine方法就能轻松实现自定义校验逻辑。
修改后的Zod Schema
直接在原有的字符串校验后追加refine即可:
const shopSchema = z.object({ categoryId: z.string() // 保留原有的空字符串校验(可选,根据你的需求) .min(1, 'Shop category is required!') // 添加自定义校验,排除'nill'值 .refine(value => value !== 'nill', { message: 'Shop category is required!' }) });
代码说明
refine的第一个参数是校验函数:传入字段值,返回true表示校验通过,返回false则触发错误。这里判断值不等于'nill'才允许通过。- 第二个参数是配置对象,通过
message指定你想要的错误提示文本。
如果你的下拉框不会出现空字符串(只有有效分类值和'nill'),也可以去掉.min(1)的校验,直接保留refine部分即可。
内容的提问来源于stack exchange,提问作者Being47
相关产品推荐
相关产品推荐

