Strings
Zod provides various methods for string validation.
Basic Validation
ts
import { z } from "zod";
// Basic string validation
const stringSchema = z.string();
// Length validation
z.string().min(5); // minimum 5 characters
z.string().max(10); // maximum 10 characters
z.string().length(5); // exactly 5 characters
// Regular expression validation
z.string().regex(/^[a-z]+$/); // only lowercase letters
Common Format Validation
ts
// Email
z.string().email(); // validate email format
// URL
z.string().url(); // validate URL format
// UUID
z.string().uuid(); // validate UUID format
// CUID
z.string().cuid(); // validate CUID format
z.string().cuid2(); // validate CUID2 format
// DateTime
z.string().datetime(); // validate ISO 8601 format
// IP Address
z.string().ip(); // validate IP address (v4 and v6)
z.string().ip({ version: "v4" }); // validate IPv4 only
z.string().ip({ version: "v6" }); // validate IPv6 only
String Transformations
ts
// Whitespace removal
z.string().trim(); // remove leading and trailing whitespace
// Case transformations
z.string().toLowerCase(); // convert to lowercase
z.string().toUpperCase(); // convert to uppercase
Custom Error Messages
ts
z.string().min(5, { message: "Must contain at least 5 character(s)" });
z.string().max(10, { message: "Must contain at most 10 character(s)" });
z.string().email({ message: "Invalid email address" });
z.string().url({ message: "Invalid URL" });
Combined Validation
ts
const username = z.string()
.min(3, { message: "Username must be at least 3 characters long" })
.max(20, { message: "Username must be at most 20 characters long" })
.regex(/^[a-zA-Z0-9_]+$/, { message: "Username can only contain letters, numbers, and underscores" });
// Usage examples
username.parse("john_doe123"); // passes
username.parse("jo"); // throws error: Username must be at least 3 characters long
username.parse("john@doe"); // throws error: Username can only contain letters, numbers, and underscores
DateTime Options
ts
// Allow timezone offset
z.string().datetime({ offset: true });
// Specify precision
z.string().datetime({ precision: 3 }); // allow 3 decimal places for milliseconds