Validation Rules
This page summarizes the built-in rules shipped by the package.
Presence and format rules
required
Passes only when the value is neither an empty string nor 0.
That means both '' and '0' return an error. Integer 0 does the same because the rule casts to string first.
email
Validates a standard email address with PHP's FILTER_VALIDATE_EMAIL.
creditCard
Validates the card number with a Luhn-style checksum after stripping non-digit characters.
iban
Validates IBAN format and checksum. It depends on bcmod() support for the final modulus check.
name
Accepts letters, spaces, apostrophes, and hyphens.
streetAddress
Requires a value that contains at least one letter, one digit, and one whitespace character.
phoneNumber
Accepts a narrow set of common phone number layouts such as:
555-555-5555555 555 55551 (519) 555-4422+1-555-555-5555
date(?string $format = null)
Without a format, the package accepts only values that round-trip to one of these shapes:
Y-m-dY-m-d H:i:s
When you pass a format, the value must match that format exactly.
starts(string $text)
Checks that the value begins with the provided prefix.
regex(string $pattern)
Runs a custom regular expression with preg_match().
jsonString
Passes only when decoding produces an object.
This is stricter than "valid JSON" in general. JSON arrays, numbers, booleans, and strings do not satisfy this rule.
same(string $otherField)
Checks loose equality against another field in the same input payload.
Use it for password confirmation or duplicate-entry checks.
Include the referenced field in the submitted payload. The comparison reads the original input array directly, so sending both keys keeps the result predictable.
captcha
Delegates to the Captcha package's default adapter and calls verify().
Use it only after the Captcha package is configured.
Database-backed rules
unique(string $modelClass, string $column)
Passes when the resolved model does not find an existing record for the given column value.
exists(string $modelClass, string $column)
Passes when the resolved model does find an existing record for the given column value.
For both rules:
- pass a model class, not a table name
- the model must be resolvable through the Model package
- database and model configuration errors bubble up
Type and numeric rules
alpha
Letters only.
alphaNumeric
Letters and digits only.
alphaDash
Letters, underscores, and dashes only.
Digits are not accepted by this rule.
alphaSpace
Letters, digits, and whitespace only.
numeric
Uses is_numeric().
integer
Uses FILTER_VALIDATE_INT.
float
Uses FILTER_VALIDATE_FLOAT.
Integer input also passes this rule.
boolean
Accepts only this fixed set of values:
true,false1,0'true','false''1','0''yes','no''on','off'
minNumeric($number)
Passes when both values are numeric and the input is greater than or equal to the minimum.
maxNumeric($number)
Passes when both values are numeric and the input is less than or equal to the maximum.
Length and membership rules
minLen(int $length)
Checks multibyte string length with mb_strlen().
maxLen(int $length)
Checks multibyte string length with mb_strlen().
exactLen(int $length)
Checks multibyte string length with mb_strlen().
contains(string $haystack)
Checks whether the normalized input value appears anywhere inside the provided text.
Comparison is case-insensitive and trims both sides first.
containsList(string ...$list)
Checks whether the normalized value matches one of the provided list items.
Comparison is case-insensitive and trims whitespace.
doesntContainsList(string ...$list)
Inverse of containsList().
File rules
These rules expect the field value to be a Quantum\Storage\UploadedFile instance.
fileSize(int $maxSize, ?int $minSize = null)
Checks byte size against a maximum and optional minimum.
If minSize is omitted, the lower bound becomes 0.
fileMimeType(string ...$mimeTypes)
Checks the detected MIME type of the uploaded file against the allowed list.
fileExtension(string ...$extensions)
Checks the normalized file extension from the original uploaded filename.
imageDimensions(?int $width = null, ?int $height = null)
Checks exact image dimensions when width and/or height are provided.
If you pass only one dimension, only that side is enforced.
This rule is for real image files. Non-image input can raise FileUploadException before the validator has a chance to add a normal validation error.
URL and IP rules
url
Requires a full valid URL.
urlExists
First validates the URL, then checks whether the hostname resolves.
This is a DNS-level existence check, not an HTTP status check.
On installations with checkdnsrr() and idn_to_ascii(), the lookup checks for an A record. If you need different DNS behavior, add a custom rule for your project.
ip
Accepts any valid IP address.
ipv4
Accepts only IPv4 addresses.
ipv6
Accepts only IPv6 addresses.