Ush*_*hir 34 validation node.js express typescript zod
如何使用 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()
})
Run Code Online (Sandbox Code Playgroud)
Sou*_*man 50
您可以通过附加一个来实现这一点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"
});
}
});
Run Code Online (Sandbox Code Playgroud)
如果密码因基本原因(不少于 4 个字符)而无法解析,则会出现该错误,但如果整个基础对象成功解析,则会发生超级细化检查。
fru*_*oaf 35
我有这样的:
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"],
});
Run Code Online (Sandbox Code Playgroud)
我正在使用 React Hook 表单。
这里有一些文档,我为您复制并粘贴,以便您可以看到它是如何工作的:https://docs.google.com/document/d/1jqTth88I-D0-qzq34B4sUGbp8wGmExS7kpc78QA_4sk/edit ?usp=sharing
您可以实现refine这样的功能:
const passwordForm = z
.object({
password: z.string(),
confirmPassword: z.string(),
})
.refine((data) => data.password === data.confirmPassword, {
message: "Passwords don't match",
path: ["confirmPassword"], // path of error
});
passwordForm.parse({ password: "asdf", confirmPassword: "qwer" });
Run Code Online (Sandbox Code Playgroud)