[Zod] Create Custom Zod Schemas and Validate project-specific data
The example case covers room numbers validation: it must start with an uppercase letter followed by three digits. z.custom
allows the creation of a brand new custom schema with a callback function that returns a boolean indicating validity.
We highlight a challenge with type inference in Zod's custom schemas: callback parameter types don't get aligned automatically - type-safety must be explicitly defined using type parameters.
We run tests against various room numbers and demonstrate how to effectively validate inputs and manage error messages.
import { z } from 'zod'
// If you just want to validate a string with a regex, z.string().regex(...) is simpler:
const RoomNumberSchema = z
.string()
.regex(/^[A-Z]\d{3}$/, {
message: 'Invalid room number: must be 1 uppercase letter + 3 digits',
})
// But if you need more control — for example, returning custom error data or applying
// multi-step validations — you can use z.custom() with a callback:
const roomNumberPattern = /^[A-Z]\d{3}$/
const RoomNumberSchemaCustom = z.custom<string>((val) => {
return roomNumberPattern.test(val)
}, {
message: 'Invalid room number',
})
// Both approaches will throw an error on bad inputs like "A1", "101A", "B2050", etc.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
2024-03-04 [Rust] ref keyword for borrow value
2024-03-04 [Rust] if let & while let
2024-03-04 [Rust] Using .map_err instead of wrap which cause panic
2024-03-04 [Rust] Using Box<dyn error::Error>> return one of miultiple error types at runtime
2022-03-04 [AWS Explained] Security
2020-03-04 [AST Babel] Babel Template
2020-03-04 [HTML5] Layout Reflow & thrashing