Skip to main content

Overview

The z.email() function creates a schema that validates email addresses according to a relaxed RFC 5322 standard.
Location in source: ~/workspace/source/packages/zod/src/v4/classic/schemas.ts:455

Basic Usage

Validation Rules

The email validator accepts a wide range of valid email formats:

Valid Email Formats

  • Standard format: email@domain.com
  • With dots: firstname.lastname@domain.com
  • Subdomains: email@subdomain.domain.com
  • Plus addressing: firstname+lastname@domain.com
  • Numbers: 1234567890@domain.com
  • Hyphens in domain: email@domain-one.com
  • Underscores: _______@domain.com
  • Multiple TLDs: email@domain.co.jp
  • Hyphens in local part: firstname-lastname@domain.com
  • Single character: x@example.com
  • Short domains: a@b.cd

Invalid Email Formats

The validator rejects:
  • Missing domain: @domain.com
  • Missing @ symbol: email.domain.com
  • Multiple @ symbols: email@domain@domain.com
  • Leading/trailing dots: .email@domain.com, email.@domain.com
  • Consecutive dots: email..email@domain.com
  • Invalid domain: email@domain
  • Domain starting with hyphen: email@-domain.com
  • Non-ASCII characters: あいうえお@domain.com
  • Quoted strings: "email"@domain.com (not supported)
  • IP addresses: email@123.123.123.123 (not supported)
  • IPv6 addresses: email@[IPv6:...] (not supported)

Examples

Basic Validation

Custom Error Message

Combining with Other Validations

In Object Schemas

Parameters

The email() function accepts an optional parameter:
  • string: Custom error message
  • EmailParams: Object with:
    • message?: string: Custom error message

Return Type

Returns a ZodEmail schema that validates and returns strings.
The email validator uses a practical implementation that balances correctness with usability. It does not support all technically valid RFC 5322 formats (like quoted strings or IP addresses) to avoid common security issues and edge cases.