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

如何在Zod中自定义表单验证的错误提示信息?

Zod 自定义中文验证错误提示方案

直接在Zod的验证规则里定义中文错误提示是最靠谱的方式,比事后字符串替换稳定得多。给你修改后的完整Schema:

const schema: ZodType<FormData> = z.object({
    firstName: z.string().nonempty("请输入名字"),
    lastName: z.string().nonempty("请输入姓氏"),
    email: z.string()
        .nonempty("请输入邮箱地址")
        .email("请输入有效的邮箱地址")
        .min(5, "邮箱长度不能少于5位"),
    pin: z.string({ invalid_type_error: "请输入4位数字" })
        .nonempty("请输入PIN码")
        .min(4, "PIN码必须是4位数字")
        .max(4, "PIN码必须是4位数字")
        .regex(pinPattern, "PIN码格式不正确"),
    phoneNumber: z.string()
        .nonempty("请输入手机号码")
        .min(11, "手机号码长度不能少于11位"),
    password: z.string()
        .nonempty("请输入密码")
        .min(8, "密码长度不能少于8位")
        .regex(Passwordregex, "密码格式不符合要求"),
    confirmPassword: z.string()
        .nonempty("请再次输入密码")
        .min(8, "确认密码长度不能少于8位"),
}).refine(data => data.password === data.confirmPassword, {
    message: "两次输入的密码不一致",
    path: ['confirmPassword']
})

为什么之前的字符串替换没生效?

Zod的默认错误文本不是固定的"String",比如空值错误是"String must not be empty",你只替换"String"会得到"First Name must not be empty",还是英文结构;而且遇到邮箱格式错误这类文本里没有"String"的情况,替换完全不起作用。

如果非要用替换方式,得针对完整错误文本匹配,比如:

<span className='text-xs font-medium text-[#DC2626]'>
  {errors.firstName?.message?.replace("String must not be empty", "请输入名字")}
</span>

但这种方式需要覆盖所有可能的默认错误文本,维护起来非常麻烦,远不如直接在Schema里定义中文提示省心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:02:47