教程 zod tutorial

Numbers

Zod 提供了丰富的数字验证功能。

基本验证

ts
import { z } from "zod";

// 基本数字验证
const numberSchema = z.number();

// 创建时的错误消息
const age = z.number({
  required_error: "年龄是必需的",
  invalid_type_error: "年龄必须是数字",
});

比较验证

ts
// 大于/小于
z.number().gt(5);  // 大于5
z.number().gte(5); // 大于等于5(别名:.min(5))
z.number().lt(5);  // 小于5
z.number().lte(5); // 小于等于5(别名:.max(5))

// 整数验证
z.number().int(); // 必须是整数

// 范围验证
z.number().min(0).max(100); // 0到100之间

特殊数字验证

ts
// 正数/负数
z.number().positive();     // > 0
z.number().nonnegative(); // >= 0
z.number().negative();    // < 0
z.number().nonpositive(); // <= 0

// 倍数验证
z.number().multipleOf(5); // 必须是5的倍数(别名:.step(5))

// 有限数验证
z.number().finite();      // 不能是 Infinity 或 -Infinity

// 安全数字验证
z.number().safe();        // 必须在 Number.MIN_SAFE_INTEGER 和 MAX_SAFE_INTEGER 之间

自定义错误消息

ts
z.number()
  .int({ message: "请输入整数" })
  .positive({ message: "数字必须大于0" })
  .max(100, { message: "数字不能大于100" });

// 组合验证示例
const ageSchema = z.number()
  .int({ message: "年龄必须是整数" })
  .min(0, { message: "年龄不能为负数" })
  .max(120, { message: "年龄不能超过120岁" });

类型转换

ts
// 使用 coerce 进行类型转换
const numberSchema = z.coerce.number();

numberSchema.parse("123");     // => 123
numberSchema.parse(true);      // => 1
numberSchema.parse(false);     // => 0
numberSchema.parse("12.3");    // => 12.3

// 组合使用
const positiveInt = z.coerce.number()
  .int({ message: "必须是整数" })
  .positive({ message: "必须是正数" });

positiveInt.parse("123");  // => 123
positiveInt.parse("-123"); // 抛出错误:必须是正数
positiveInt.parse("12.3"); // 抛出错误:必须是整数