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"); // 抛出错误:必须是整数