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

如何使用Zod实现确认密码的一致性校验?

使用Zod实现确认密码一致性校验

要验证密码与确认密码的一致性,你可以利用Zod的.refine()方法添加自定义校验逻辑,以下是两种常用实现方式:

方式一:对整个Schema对象添加校验(推荐)

这种方式直接针对整个表单对象做校验,逻辑清晰且便于维护:

import z from "zod";

export const registerUserSchema = z.object({
    firstName: z.string(),
    lastName: z.string(),
    userName: z.string(),
    email: z.string().email(),
    phone: z.string().transform(data => Number(data)),
    password: z.string().min(4),
    confirmPassword: z.string().min(4),
    avatar: z.string().optional(),
    isVerified: z.boolean().optional()
}).refine((formData) => formData.password === formData.confirmPassword, {
    message: "密码与确认密码不匹配",
    path: ["confirmPassword"] // 将错误关联到confirmPassword字段,方便前端定位输入框
});

说明

  • .refine()接收两个参数:第一个是校验函数,返回false时触发错误;第二个是错误配置对象。
  • path属性指定错误归属的字段,前端处理校验错误时,能直接把提示信息显示在确认密码输入框下方。

方式二:针对confirmPassword字段单独校验

如果你希望校验逻辑绑定在确认密码字段上,可以用以下写法:

import z from "zod";

export const registerUserSchema = z.object({
    firstName: z.string(),
    lastName: z.string(),
    userName: z.string(),
    email: z.string().email(),
    phone: z.string().transform(data => Number(data)),
    password: z.string().min(4),
    confirmPassword: z.string().min(4).refine((value, context) => {
        // 通过context.parent获取表单中的password字段值
        return value === context.parent.password;
    }, {
        message: "密码与确认密码不匹配"
    }),
    avatar: z.string().optional(),
    isVerified: z.boolean().optional()
});

两种方式都能实现需求,优先推荐第一种,因为它的校验逻辑更直观,也更容易扩展其他跨字段校验规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:15:50