Skip to content

Built-in rules ​

Every built-in rule, by category. Params go next to rule in a field's rules, and every rule also takes a message. A rule with params per kind lists them by kind. The validation rules guide explains how they run.

Length ​

RuleLabelKindsParamsDescription
lengthExact lengthstring, arrayvalue: integer, at least 0
minLengthMinimum lengthstring, arrayvalue: integer, at least 0
maxLengthMaximum lengthstring, arrayvalue: integer, at least 0
notLengthNot this lengthstring, arrayvalue: integer, at least 0

Text ​

RuleLabelKindsParamsDescription
graphemesExact charactersstringvalue: integer, at least 0Counts characters as people see them, so an emoji is one.
minGraphemesMinimum charactersstringvalue: integer, at least 0Counts characters as people see them, so an emoji is one.
maxGraphemesMaximum charactersstringvalue: integer, at least 0Counts characters as people see them, so an emoji is one.
notGraphemesNot this many charactersstringvalue: integer, at least 0Counts characters as people see them, so an emoji is one.
wordsExact wordsstringlocale?: string; value: integer, at least 0
minWordsMinimum wordsstringlocale?: string; value: integer, at least 0
maxWordsMaximum wordsstringlocale?: string; value: integer, at least 0
notWordsNot this many wordsstringlocale?: string; value: integer, at least 0
bytesExact bytesstringvalue: integer, at least 0Counts UTF-8 bytes, e.g. to fit a database column.
minBytesMinimum bytesstringvalue: integer, at least 0Counts UTF-8 bytes, e.g. to fit a database column.
maxBytesMaximum bytesstringvalue: integer, at least 0Counts UTF-8 bytes, e.g. to fit a database column.
notBytesNot this many bytesstringvalue: integer, at least 0Counts UTF-8 bytes, e.g. to fit a database column.

Content ​

RuleLabelKindsParamsDescription
regexMatches patternstringpattern: string; flags?: stringA JavaScript regular expression, without the slashes.
startsWithStarts withstringvalue: string
endsWithEnds withstringvalue: string
includesContainsstring, arraystring: value: string
array: value: string | number | boolean
excludesDoes not containstring, arraystring: value: string
array: value: string | number | boolean

Format ​

RuleLabelKindsParamsDescription
emailEmailstring
rfcEmailEmail (RFC 5322)string
urlURLstring
domainDomainstring
slugSlugstring
uuidUUIDstring
ulidULIDstring
cuid2CUID2string
nanoidNano IDstring
ipIP addressstring
ipv4IPv4 addressstring
ipv6IPv6 addressstring
macMAC addressstring
mac48MAC-48 addressstring
mac64MAC-64 addressstring
hexColorHex colourstring
hexadecimalHexadecimalstring
octalOctalstring
decimalDecimal numberstring
digitsDigits onlystring
base64Base64string
bicBIC (SWIFT code)string
creditCardCredit card numberstring
imeiIMEIstring
isbnISBNstring
isrcISRCstring
emojiEmojistring
hashHashstringtypes: ("md4" | "md5" | "sha1" | "sha256" | "sha384" | "sha512" | "ripemd128" | "ripemd160" | "tiger128" | "tiger160" | "tiger192" | "crc32" | "crc32b" | "adler32")[], at least 1

Date ​

RuleLabelKindsParamsDescription
isoDateISO datestring, dateLike 2026-10-28
isoDateTimeISO date and timestring, dateLike 2026-10-28T14:30
isoTimeISO timestring, dateLike 14:30
isoTimeSecondISO time with secondsstring, dateLike 14:30:15
isoTimestampISO timestampstring, dateLike 2026-10-28T14:30:15.000Z
isoWeekISO weekstring, dateLike 2026-W44

Comparison ​

RuleLabelKindsParamsDescription
minValueMinimumnumber, datenumber: value: number
date: value: string
maxValueMaximumnumber, datenumber: value: number
date: value: string
gtValueGreater thannumber, datenumber: value: number
date: value: string
ltValueLess thannumber, datenumber: value: number
date: value: string
valueEqualsnumber, date, string, booleannumber: value: number
date: value: string
string: value: string
boolean: value: boolean
notValueDoes not equalnumber, date, string, booleannumber: value: number
date: value: string
string: value: string
boolean: value: boolean
valuesOne ofnumber, datenumber: values: number[], at least 1
date: values: string[], at least 1
notValuesNone ofnumber, datenumber: values: number[], at least 1
date: values: string[], at least 1

Number ​

RuleLabelKindsParamsDescription
integerWhole numbernumber
safeIntegerSafe whole numbernumber
finiteFinite numbernumber
multipleOfMultiple ofnumbervalue: number

File ​

RuleLabelKindsParamsDescription
minSizeMinimum sizefilevalue: integer, at least 0In bytes, e.g. 1048576 for 1 MiB.
maxSizeMaximum sizefilevalue: integer, at least 0In bytes, e.g. 1048576 for 1 MiB.
sizeExact sizefilevalue: integer, at least 0In bytes, e.g. 1048576 for 1 MiB.
notSizeNot this sizefilevalue: integer, at least 0In bytes, e.g. 1048576 for 1 MiB.
mimeTypeFile typefiletypes: string[], at least 1

Normalize ​

RuleLabelKindsParamsDescription
trimTrimstring
trimStartTrim startstring
trimEndTrim endstring
toLowerCaseLowercasestring
toUpperCaseUppercasestring
normalizeUnicode normalizestringform?: "NFC" | "NFD" | "NFKC" | "NFKD"Defaults to NFC.
toMinValueRaise to minimumnumbervalue: numberReplaces a smaller number with the minimum.
toMaxValueLower to maximumnumbervalue: numberReplaces a larger number with the maximum.

Form rules ​

These go in formRules, next to fields. Each one also takes field, the path its error shows on, and message. See the form rules guide.

RuleLabelKindsParamsDescription
sameAsSame asstring, number, boolean, dateother: stringEquals another field, e.g. to confirm a password
differentFromDifferent fromstring, number, boolean, dateother: stringDiffers from another field, e.g. a new password
compareComparenumber, dateop: "lt" | "lte" | "gt" | "gte"; other: stringLess or greater than another field, e.g. an end date after the start