You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Zod的z.nativeEnum校验性别字段,自定义错误消息不生效

问题原因及解决方案

你的问题出在**required_error的配置位置错误**,以及未明确标记字段为必填:

  1. Zod的z.nativeEnum()的第二个配置参数仅支持枚举类型校验相关的错误(比如传入非枚举成员的值),并不支持required_error属性——这个属性是用来配置「字段必须存在」的校验错误,不属于枚举类型校验的配置范围。
  2. 如果不给字段添加.required(),当未选择选项导致字段值为undefined时,Zod会默认认为该字段是可选的,不会触发必填校验逻辑。

正确写法

基础场景:确保字段必须存在且为枚举成员

gender: z.nativeEnum(Gender, {
  invalid_type_error: 'Le sexe doit être homme ou femme.',
}).required({ message: 'Le sexe est obligatoire' }),

特殊场景:表单未选择时提交空字符串

如果你的表单在未选择选项时会提交空字符串""而非undefined,需要先预处理空值再做校验:

gender: z.preprocess(
  (val) => val === "" ? undefined : val,
  z.nativeEnum(Gender, {
    invalid_type_error: 'Le sexe doit être homme ou femme.',
  }).required({ message: 'Le sexe est obligatoire' })
),

配置后效果:

  • 字段缺失或值为undefined时,显示自定义必填错误Le sexe est obligatoire
  • 传入非枚举成员的值(比如空字符串、其他无效值)时,显示Le sexe doit être homme ou femme.

内容的提问来源于stack exchange,提问作者Ismail_Aj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:48:29