typescript 如何使用zod检查确认密码

eqfvzcg8  于 2023-02-13  发布在  TypeScript
关注(0)|答案(2)|浏览(190)

如何使用Zod检查确认密码?。我想使用Zod验证确认密码。我想让Zod将我的密码与comparePassword进行比较

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()
})
olmpazwi

olmpazwi1#

您可以通过添加superRefine来实现这一点

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()
}).superRefine(({ confirmPassword, password }, ctx) => {
  if (confirmPassword !== password) {
    ctx.addIssue({
      code: "custom",
      message: "The passwords did not match"
    });
  }
});

如果密码由于基本原因(不包括至少4个字符)而无法解析,则会出现该错误,但如果整个基本对象解析成功,则会进行超级细化检查。

xeufq47z

xeufq47z2#

我有这样的话:

const validationSchema = z
    .object({
        name: string().min(1, { message: "Name is required" }), // pass custom message
        email: string().email(),
        website: string().optional(),
        country: string(),
        password: string(),
        confirm: string(),
    })
    .refine((data) => data.password === data.confirm, {
        message: "Passwords don't match",
        path: ["confirm"],
    });

我正在使用React Hook表格。
这里有一些文档,我复制并粘贴给你,所以你可以看到它是如何工作的:https://docs.google.com/document/d/1jqTth88I-D0-qzq34B4sUGbp8wGmExS7kpc78QA_4sk/edit?usp=sharing

相关问题