[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.

 

posted @   Zhentiw  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 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
点击右上角即可分享
微信分享提示