You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Zod Schema适配多格式布尔值与指定规则字符串校验

Zod Schema 适配需求解决方案

1. 扩展布尔类型支持多种格式

用 z.preprocess 先做值转换,把输入的字符串映射为标准布尔值,再交给 z.boolean() 校验:

import { z } from "zod";

const flexibleBoolean = z.preprocess((val) => {
  if (typeof val === "string") {
    const lowerVal = val.toLowerCase();
    if (lowerVal === "t" || lowerVal === "yes") return true;
    if (lowerVal === "f" || lowerVal === "no") return false;
  }
  // 不符合规则的值会进入后续校验抛出错误
  return val;
}, z.boolean());

// 测试示例
flexibleBoolean.parse("T"); // 返回 true
flexibleBoolean.parse("No"); // 返回 false
flexibleBoolean.parse("invalid"); // 抛出 ZodError

这段逻辑会先将输入字符串转小写,匹配允许的取值后转换为对应布尔值,非预期值会被布尔校验器拦截报错。

2. 固定长度的大写字母+数字字符串校验

通过 z.string().regex() 配合正则表达式实现,规则限定必须是大写字母(A-Z)或数字(0-9),且长度固定:

// 以长度6为例,把 {6} 替换为你需要的固定长度即可
const fixedLengthAlnum = z.string().regex(/^[A-Z0-9]{6}$/, {
  message: "必须是6位大写字母或数字的组合",
});

// 测试示例
fixedLengthAlnum.parse("ABC123"); // 校验通过
fixedLengthAlnum.parse("ABc123"); // 报错(包含小写字母)
fixedLengthAlnum.parse("ABC12"); // 报错(长度不足6)
fixedLengthAlnum.parse("ABC1234"); // 报错(长度超过6)

正则 ^[A-Z0-9]{N}$ 中的 N 替换为目标固定长度,同时可自定义报错信息提升可读性。

内容的提问来源于stack exchange,提问作者Tad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:28:11