Learning
Zod

Haladó validációk (refine, transform)

Egyedi szabályok refine/superRefine-val, adat transzformáció transform-mal, preprocess és pipe.

refine – egyedi validációs szabály

import { z } from "zod"

const evenNumberSchema = z.number().refine((val) => val % 2 === 0, {
  message: "Csak páros szám megengedett",
})
const passwordSchema = z.string().superRefine((val, ctx) => {
  if (val.length < 8) {
    ctx.addIssue({
      code: z.ZodIssueCode.too_small,
      minimum: 8,
      type: "string",
      inclusive: true,
      message: "Minimum 8 karakter szükséges",
    })
  }
  if (!/[A-Z]/.test(val)) {
    ctx.addIssue({
      code: z.ZodIssueCode.custom,
      message: "Legalább egy nagybetű szükséges",
    })
  }
})

transform – adat átalakítása validáció után

const numericStringSchema = z.string().transform((val) => parseInt(val, 10))
const emailSchema = z
  .string()
  .email()
  .transform((val) => val.toLowerCase().trim())
const dateStringSchema = z
  .string()
  .datetime()
  .transform((val) => new Date(val))

preprocess – validáció előtti előkészítés

const numberFromString = z.preprocess(
  (val) => (typeof val === "string" ? parseFloat(val) : val),
  z.number().positive()
)

pipe – sémák láncolása

const schema = z
  .string()
  .transform((val) => val.split(","))
  .pipe(z.array(z.string().min(1)))

On this page