
Zod 本身不提供内置的“全局去空格”方法,但可通过 transform 配合正则表达式实现全量空白字符清除,并与后续验证链式组合。
zod 本身不提供内置的“全局去空格”方法,但可通过 `transform` 配合正则表达式实现全量空白字符清除,并与后续验证链式组合。
在 Zod 中,.trim() 仅能去除字符串首尾空白(等价于 JavaScript 的 String.prototype.trim()),无法处理中间的空格、制表符、换行符等。若需彻底移除所有空白字符(包括空格、\t、\n、\r、全角空格等),推荐使用 .transform() 方法对原始值进行预处理:
import { z } from 'zod';
const stringWithNoWhitespace = z
.string()
.transform((value) => value.replace(/\s/g, '')) // ✅ 移除所有 Unicode 空白字符
.min(1, { message: '该字段不能为空' })
.max(10, { message: '长度不能超过 10 个字符' })
.regex(/^[a-zA-Z0-9]+$/, { message: '仅允许字母和数字' });
? 提示:/\s/g 比 /\s+/g 更稳妥——前者匹配每个空白字符并逐个替换(含连续空白),后者虽功能等效,但正则效率略低;且 /g 标志确保全局替换,不可省略。
⚠️ 注意事项:
- transform 是类型转换操作,执行后原始字符串已被修改,后续验证(如 .min()、.regex())均基于去空格后的新值;
- 若需保留原始输入用于日志或审计,建议在 transform 前先做浅拷贝或使用 .refine() + 自定义错误逻辑替代;
- transform 不会改变 Zod Schema 的输出类型推导——上述例子中,最终解析结果类型仍为 string,但内容已无空白;
- 如需保留部分空白(如仅删空格、不删换行),可改用更精确正则,例如 value.replace(/ /g, '')。
总结:Zod 的函数式设计鼓励通过 transform 实现灵活的数据清洗,而非依赖内置修饰符。结合正则与链式验证,既能保证数据洁净性,又不失类型安全与可读性。










