respect-validation/docs/validators.md
Henrique Moody b701fac656
Create ShortCircuit validator and ShortCircuitable interface
This commit introduces a mechanism for validators to return early once
the validation outcome is determined, rather than evaluating all child
validators.

The ShortCircuit validator evaluates validators sequentially and stops
at the first failure, similar to how PHP's && operator works. This is
useful when later validators depend on earlier ones passing, or when
you want only the first error message.

The ShortCircuitCapable interface allows composite validators (AllOf,
AnyOf, OneOf, NoneOf, Each, All) to implement their own short-circuit
logic.

Why "ShortCircuit" instead of "FailFast":

The name "FailFast" was initially considered but proved misleading.
While AllOf stops on failure (fail fast), AnyOf stops on success
(succeed fast), and OneOf stops on the second success. The common
behavior is not about failing quickly, but about returning as soon as
the outcome is determined—which is exactly what short-circuit
evaluation means. This terminology is familiar to developers from
boolean operators (&& and ||), making the behavior immediately
understandable.

Co-authored-by: Alexandre Gomes Gaigalas <alganet@gmail.com>
Assisted-by: Claude Code (Opus 4.5)
2026-02-05 17:32:42 +01:00

374 lines
27 KiB
Markdown

<!--
SPDX-License-Identifier: MIT
SPDX-FileCopyrightText: (c) Respect Project Contributors
SPDX-FileContributor: Alexandre Gomes Gaigalas <alganet@gmail.com>
SPDX-FileContributor: Henrique Moody <henriquemoody@gmail.com>
-->
# Validators
In this page you will find a list of validators by their category.
**Arrays**: [ArrayType][] - [ArrayVal][] - [Contains][] - [ContainsAny][] - [ContainsCount][] - [Each][] - [EndsWith][] - [In][] - [Key][] - [KeyExists][] - [KeyOptional][] - [KeySet][] - [Sorted][] - [StartsWith][] - [Subset][] - [Unique][]
**Banking**: [CreditCard][] - [Iban][]
**Booleans**: [AlwaysInvalid][] - [AlwaysValid][] - [BoolType][] - [BoolVal][] - [FalseVal][] - [TrueVal][]
**Callables**: [After][] - [CallableType][] - [Factory][] - [Satisfies][]
**Comparisons**: [All][] - [Between][] - [BetweenExclusive][] - [Equals][] - [Equivalent][] - [GreaterThan][] - [GreaterThanOrEqual][] - [Identical][] - [In][] - [Length][] - [LessThan][] - [LessThanOrEqual][] - [Max][] - [Min][]
**Composite**: [AllOf][] - [AnyOf][] - [NoneOf][] - [OneOf][] - [ShortCircuit][]
**Conditions**: [Not][] - [ShortCircuit][] - [When][]
**Core**: [Named][] - [Not][] - [Templated][]
**Date and Time**: [Date][] - [DateTime][] - [DateTimeDiff][] - [LeapDate][] - [LeapYear][] - [Time][]
**Display**: [Format][] - [Masked][] - [Named][] - [Templated][]
**File system**: [Directory][] - [Executable][] - [Exists][] - [Extension][] - [File][] - [Image][] - [Mimetype][] - [Readable][] - [Size][] - [SymbolicLink][] - [Writable][]
**ISO codes**: [CountryCode][] - [CurrencyCode][] - [LanguageCode][] - [SubdivisionCode][]
**Identifications**: [Bsn][] - [Cnh][] - [Cnpj][] - [Cpf][] - [Hetu][] - [Imei][] - [Isbn][] - [Luhn][] - [MacAddress][] - [NfeAccessKey][] - [Nif][] - [Nip][] - [Pesel][] - [Pis][] - [PolishIdCard][] - [PortugueseNif][]
**Internet**: [Domain][] - [Email][] - [Ip][] - [PublicDomainSuffix][] - [Tld][] - [Url][]
**Localization**: [CountryCode][] - [CurrencyCode][] - [LanguageCode][] - [PostalCode][] - [SubdivisionCode][]
**Math**: [Factor][] - [Finite][] - [Infinite][] - [Multiple][] - [Negative][] - [Positive][]
**Miscellaneous**: [Blank][] - [Falsy][] - [Masked][] - [Named][] - [Templated][] - [Undef][]
**Nesting**: [After][] - [AllOf][] - [AnyOf][] - [Each][] - [Factory][] - [Key][] - [KeySet][] - [NoneOf][] - [Not][] - [NullOr][] - [OneOf][] - [Property][] - [PropertyOptional][] - [ShortCircuit][] - [UndefOr][] - [When][]
**Numbers**: [Base][] - [Decimal][] - [Digit][] - [Even][] - [Factor][] - [Finite][] - [FloatType][] - [FloatVal][] - [Infinite][] - [IntType][] - [IntVal][] - [Multiple][] - [Negative][] - [Number][] - [NumericVal][] - [Odd][] - [Positive][] - [Roman][]
**Objects**: [Attributes][] - [Instance][] - [ObjectType][] - [Property][] - [PropertyExists][] - [PropertyOptional][]
**Strings**: [Alnum][] - [Alpha][] - [Base64][] - [Charset][] - [Consonant][] - [Contains][] - [ContainsAny][] - [ContainsCount][] - [Control][] - [Digit][] - [Emoji][] - [EndsWith][] - [Format][] - [Graph][] - [HexRgbColor][] - [In][] - [Json][] - [Lowercase][] - [Phone][] - [PostalCode][] - [Printable][] - [Punct][] - [Regex][] - [Slug][] - [Sorted][] - [Space][] - [Spaced][] - [StartsWith][] - [StringType][] - [StringVal][] - [Uppercase][] - [Uuid][] - [Version][] - [Vowel][] - [Xdigit][]
**Structures**: [Attributes][] - [Key][] - [KeyExists][] - [KeyOptional][] - [KeySet][] - [Property][] - [PropertyExists][] - [PropertyOptional][]
**Transformations**: [After][] - [All][] - [Each][] - [Length][] - [Max][] - [Min][] - [Size][]
**Types**: [ArrayType][] - [ArrayVal][] - [BoolType][] - [BoolVal][] - [CallableType][] - [Countable][] - [FloatType][] - [FloatVal][] - [IntType][] - [IntVal][] - [IterableType][] - [IterableVal][] - [NullType][] - [NumericVal][] - [ObjectType][] - [ResourceType][] - [ScalarVal][] - [StringType][] - [StringVal][]
## Alphabetically
- [After][] - `v::after(str_split(...), v::arrayType()->lengthEquals(5))->assert('world');`
- [All][] - `v::all(v::dateTime())->assert($releaseDates);`
- [AllOf][] - `v::allOf(v::intVal(), v::positive())->assert(15);`
- [Alnum][] - `v::alnum(' ')->assert('foo 123');`
- [Alpha][] - `v::alpha(' ')->assert('some name');`
- [AlwaysInvalid][] - `v::not(v::alwaysInvalid())->assert('whatever');`
- [AlwaysValid][] - `v::alwaysValid()->assert('whatever');`
- [AnyOf][] - `v::anyOf(v::intVal(), v::floatVal())->assert(15.5);`
- [ArrayType][] - `v::arrayType()->assert([]);`
- [ArrayVal][] - `v::arrayVal()->assert([]);`
- [Attributes][] - `v::attributes()->assert(new Person('John Doe', '2020-06-23', 'john.doe@gmail.com'));`
- [Base][] - `v::base(2)->assert('011010001');`
- [Base64][] - `v::base64()->assert('cmVzcGVjdCE=');`
- [Between][] - `v::intVal()->between(10, 20)->assert(10);`
- [BetweenExclusive][] - `v::betweenExclusive('a', 'e')->assert('c');`
- [Blank][] - `v::blank()->assert(' ');`
- [BoolType][] - `v::boolType()->assert(true);`
- [BoolVal][] - `v::boolVal()->assert('on');`
- [Bsn][] - `v::bsn()->assert('612890053');`
- [CallableType][] - `v::callableType()->assert(function () {});`
- [Charset][] - `v::charset('ASCII')->assert('sugar');`
- [Cnh][] - `v::cnh()->assert('02650306461');`
- [Cnpj][] - `v::cnpj()->assert('00394460005887');`
- [Consonant][] - `v::consonant()->assert('xkcd');`
- [Contains][] - `v::contains('ipsum')->assert('lorem ipsum');`
- [ContainsAny][] - `v::containsAny(['lorem', 'dolor'])->assert('lorem ipsum');`
- [ContainsCount][] - `v::containsCount('ipsum', 2)->assert('ipsum lorem ipsum');`
- [Control][] - `v::control()->assert("\n\r\t");`
- [Countable][] - `v::countable()->assert([]);`
- [CountryCode][] - `v::countryCode()->assert('BR');`
- [Cpf][] - `v::cpf()->assert('95574461102');`
- [CreditCard][] - `v::creditCard()->assert('5376 7473 9720 8720');`
- [CurrencyCode][] - `v::currencyCode()->assert('GBP');`
- [Date][] - `v::date()->assert('2017-12-31');`
- [DateTime][] - `v::dateTime()->assert('2009-01-01');`
- [DateTimeDiff][] - `v::dateTimeDiff('years', v::greaterThan(18), 'd/m/Y')->assert('09/12/1990');`
- [Decimal][] - `v::decimal(2)->assert('27990.50');`
- [Digit][] - `v::digit(' ')->assert('020 612 1851');`
- [Directory][] - `v::directory()->assert(__DIR__);`
- [Domain][] - `v::domain()->assert('google.com');`
- [Each][] - `v::each(v::dateTime())->assert($releaseDates);`
- [Email][] - `v::email()->assert('alganet@gmail.com');`
- [Emoji][] - `v::emoji()->assert('🍕');`
- [EndsWith][] - `v::endsWith('ipsum')->assert('lorem ipsum');`
- [Equals][] - `v::equals('alganet')->assert('alganet');`
- [Equivalent][] - `v::equivalent(1)->assert(true);`
- [Even][] - `v::intVal()->even()->assert(2);`
- [Executable][] - `v::executable()->assert('/path/to/executable');`
- [Exists][] - `v::exists()->assert(__FILE__);`
- [Extension][] - `v::extension('png')->assert('image.png');`
- [Factor][] - `v::factor(0)->assert(5);`
- [Factory][] - `v::factory(static fn($input) => v::boolVal())->assert(true);`
- [FalseVal][] - `v::falseVal()->assert(false);`
- [Falsy][] - `v::falsy()->assert('');`
- [File][] - `v::file()->assert(__FILE__);`
- [Finite][] - `v::finite()->assert('10');`
- [FloatType][] - `v::floatType()->assert(1.5);`
- [FloatVal][] - `v::floatVal()->assert(1.5);`
- [Format][] - `v::format(f::pattern('00-00'))->assert('42-33');`
- [Graph][] - `v::graph()->assert('LKM@#$%4;');`
- [GreaterThan][] - `v::greaterThan(10)->assert(11);`
- [GreaterThanOrEqual][] - `v::intVal()->greaterThanOrEqual(10)->assert(10);`
- [Hetu][] - `v::hetu()->assert('010106A9012');`
- [HexRgbColor][] - `v::hexRgbColor()->assert('#FFFAAA');`
- [Iban][] - `v::iban()->assert('SE35 5000 0000 0549 1000 0003');`
- [Identical][] - `v::identical(42)->assert(42);`
- [Image][] - `v::image()->assert('/path/to/image.gif');`
- [Imei][] - `v::imei()->assert('35-209900-176148-1');`
- [In][] - `v::in('lorem ipsum')->assert('ipsum');`
- [Infinite][] - `v::infinite()->assert(INF);`
- [Instance][] - `v::instance('DateTime')->assert(new DateTime);`
- [IntType][] - `v::intType()->assert(42);`
- [IntVal][] - `v::intVal()->assert('10');`
- [Ip][] - `v::ip()->assert('127.0.0.1');`
- [Isbn][] - `v::isbn()->assert('ISBN-13: 978-0-596-52068-7');`
- [IterableType][] - `v::iterableType()->assert([]);`
- [IterableVal][] - `v::iterableVal()->assert([]);`
- [Json][] - `v::json()->assert('{"foo":"bar"}');`
- [Key][] - `v::key('name', v::stringType())->assert(['name' => 'The Respect Panda']);`
- [KeyExists][] - `v::keyExists('name')->assert(['name' => 'The Respect Panda']);`
- [KeyOptional][] - `v::keyOptional('name', v::stringType())->assert([]);`
- [KeySet][] - `v::keySet(v::key('foo', v::intVal()))->assert(['foo' => 42]);`
- [LanguageCode][] - `v::languageCode()->assert('pt');`
- [LeapDate][] - `v::leapDate('Y-m-d')->assert('1988-02-29');`
- [LeapYear][] - `v::leapYear()->assert('1988');`
- [Length][] - `v::length(v::between(1, 5))->assert('abc');`
- [LessThan][] - `v::lessThan(10)->assert(9);`
- [LessThanOrEqual][] - `v::lessThanOrEqual(10)->assert(9);`
- [Lowercase][] - `v::stringType()->lowercase()->assert('xkcd');`
- [Luhn][] - `v::luhn()->assert('2222400041240011');`
- [MacAddress][] - `v::macAddress()->assert('00:11:22:33:44:55');`
- [Masked][] - `v::masked('1-@', v::email())->assert('foo@example.com');`
- [Max][] - `v::max(v::equals(30))->assert([10, 20, 30]);`
- [Mimetype][] - `v::mimetype('image/png')->assert('/path/to/image.png');`
- [Min][] - `v::min(v::equals(10))->assert([10, 20, 30]);`
- [Multiple][] - `v::intVal()->multiple(3)->assert(9);`
- [Named][] - `v::named('Your email', v::email())->assert('foo@example.com');`
- [Negative][] - `v::numericVal()->negative()->assert(-15);`
- [NfeAccessKey][] - `v::nfeAccessKey()->assert('52060433009911002506550120000007800267301615');`
- [Nif][] - `v::nif()->assert('49294492H');`
- [Nip][] - `v::nip()->assert('1645865777');`
- [NoneOf][] - `v::noneOf(v::intVal(), v::floatVal())->assert('foo');`
- [Not][] - `v::not(v::ip())->assert('foo');`
- [NullOr][] - `v::nullOr(v::email())->assert(null);`
- [NullType][] - `v::nullType()->assert(null);`
- [Number][] - `v::number()->assert(42);`
- [NumericVal][] - `v::numericVal()->assert(-12);`
- [ObjectType][] - `v::objectType()->assert(new stdClass);`
- [Odd][] - `v::odd()->assert(3);`
- [OneOf][] - `v::oneOf(v::digit(), v::alpha())->assert('AB');`
- [Pesel][] - `v::pesel()->assert('21120209256');`
- [Phone][] - `v::phone()->assert('+1 650 253 00 00');`
- [Pis][] - `v::pis()->assert('120.0340.678-8');`
- [PolishIdCard][] - `v::polishIdCard()->assert('AYW036733');`
- [PortugueseNif][] - `v::portugueseNif()->assert('124885446');`
- [Positive][] - `v::positive()->assert(1);`
- [PostalCode][] - `v::postalCode('BR')->assert('02179000');`
- [Printable][] - `v::printable()->assert('LMKA0$% _123');`
- [Property][] - `v::property('name', v::equals('The Respect Panda'))->assert($object);`
- [PropertyExists][] - `v::propertyExists('name')->assert($object);`
- [PropertyOptional][] - `v::propertyOptional('name', v::notBlank())->assert($object);`
- [PublicDomainSuffix][] - `v::publicDomainSuffix()->assert('co.uk');`
- [Punct][] - `v::punct()->assert('&,.;[]');`
- [Readable][] - `v::readable()->assert('/path/to/file.txt');`
- [Regex][] - `v::regex('/[a-z]/')->assert('a');`
- [ResourceType][] - `v::resourceType()->assert(fopen('/path/to/file.txt', 'r'));`
- [Roman][] - `v::roman()->assert('IV');`
- [Satisfies][] - `v::satisfies(fn (int $input): bool => $input % 5 === 0,)->assert(10);`
- [ScalarVal][] - `v::scalarVal()->assert(135.0);`
- [ShortCircuit][] - `v::shortCircuit(v::intVal(), v::positive())->assert(15);`
- [Size][] - `v::size('KB', v::greaterThan(1))->assert('/path/to/file');`
- [Slug][] - `v::slug()->assert('my-wordpress-title');`
- [Sorted][] - `v::sorted('ASC')->assert([1, 2, 3]);`
- [Space][] - `v::space()->assert(' ');`
- [Spaced][] - `v::spaced()->assert('foo bar');`
- [StartsWith][] - `v::startsWith('lorem')->assert('lorem ipsum');`
- [StringType][] - `v::stringType()->assert('hi');`
- [StringVal][] - `v::stringVal()->assert('6');`
- [SubdivisionCode][] - `v::subdivisionCode('BR')->assert('SP');`
- [Subset][] - `v::subset([1, 2, 3])->assert([1, 2]);`
- [SymbolicLink][] - `v::symbolicLink()->assert('/path/to/symbolic-link');`
- [Templated][] - `v::templated('You must provide a valid email', v::email())->assert('foo@bar.com');`
- [Time][] - `v::time()->assert('00:00:00');`
- [Tld][] - `v::tld()->assert('com');`
- [TrueVal][] - `v::trueVal()->assert(true);`
- [Undef][] - `v::undef()->assert('');`
- [UndefOr][] - `v::undefOr(v::alpha())->assert('');`
- [Unique][] - `v::unique()->assert([]);`
- [Uppercase][] - `v::uppercase()->assert('W3C');`
- [Url][] - `v::url()->assert('http://example.com');`
- [Uuid][] - `v::uuid()->assert('eb3115e5-bd16-4939-ab12-2b95745a30f3');`
- [Version][] - `v::version()->assert('1.0.0');`
- [Vowel][] - `v::vowel()->assert('aei');`
- [When][] - `v::when(v::intVal(), v::positive(), v::notBlank())->assert(1);`
- [Writable][] - `v::writable()->assert('/path/to/file');`
- [Xdigit][] - `v::xdigit()->assert('abc123');`
[After]: validators/After.md "Validates the input after applying a callable to it."
[All]: validators/All.md "Validates all items of the input against a given validator."
[AllOf]: validators/AllOf.md "Will validate if all inner validators validates."
[Alnum]: validators/Alnum.md "Validates whether the input is alphanumeric or not."
[Alpha]: validators/Alpha.md "Validates whether the input contains only alphabetic characters. This is similar"
[AlwaysInvalid]: validators/AlwaysInvalid.md "Validates any input as invalid."
[AlwaysValid]: validators/AlwaysValid.md "Validates any input as valid."
[AnyOf]: validators/AnyOf.md "This is a group validator that acts as an OR operator."
[ArrayType]: validators/ArrayType.md "Validates whether the type of an input is array."
[ArrayVal]: validators/ArrayVal.md "Validates if the input is an array or if the input can be used as an array"
[Attributes]: validators/Attributes.md "Validates the PHP attributes defined in the properties of the input."
[Base]: validators/Base.md "Validate numbers in any base, even with non regular bases."
[Base64]: validators/Base64.md "Validate if a string is Base64-encoded."
[Between]: validators/Between.md "Validates whether the input is between two other values."
[BetweenExclusive]: validators/BetweenExclusive.md "Validates whether the input is between two other values, exclusively."
[Blank]: validators/Blank.md "Validates if the given input is a blank value (`null`, zeros, empty strings or empty arrays, recursively)."
[BoolType]: validators/BoolType.md "Validates whether the type of the input is boolean."
[BoolVal]: validators/BoolVal.md "Validates if the input results in a boolean value:"
[Bsn]: validators/Bsn.md "Validates a Dutch citizen service number (BSN)."
[CallableType]: validators/CallableType.md "Validates whether the pseudo-type of the input is callable."
[Charset]: validators/Charset.md "Validates if a string is in a specific charset."
[Cnh]: validators/Cnh.md "Validates a Brazilian driver's license."
[Cnpj]: validators/Cnpj.md "Validates the structure and mathematical integrity of Brazilian CNPJ identifiers."
[Consonant]: validators/Consonant.md "Validates if the input contains only consonants."
[Contains]: validators/Contains.md "Validates if the input contains some value."
[ContainsAny]: validators/ContainsAny.md "Validates if the input contains at least one of defined values"
[ContainsCount]: validators/ContainsCount.md "Validates if the input contains a value a specific number of times."
[Control]: validators/Control.md "Validates if all of the characters in the provided string, are control"
[Countable]: validators/Countable.md "Validates if the input is countable, in other words, if you're allowed to use"
[CountryCode]: validators/CountryCode.md "Validates whether the input is a country code in ISO 3166-1 standard."
[Cpf]: validators/Cpf.md "Validates a Brazillian CPF number."
[CreditCard]: validators/CreditCard.md "Validates a credit card number."
[CurrencyCode]: validators/CurrencyCode.md "Validates an ISO 4217 currency code."
[Date]: validators/Date.md "Validates if input is a date. The `$format` argument should be in accordance to"
[DateTime]: validators/DateTime.md "Validates whether an input is a date/time or not."
[DateTimeDiff]: validators/DateTimeDiff.md "Validates the difference of date/time against a specific validator."
[Decimal]: validators/Decimal.md "Validates whether the input matches the expected number of decimals."
[Digit]: validators/Digit.md "Validates whether the input contains only digits."
[Directory]: validators/Directory.md "Validates if the given path is a directory."
[Domain]: validators/Domain.md "Validates whether the input is a valid domain name or not."
[Each]: validators/Each.md "Validates whether each value in the input is valid according to another validator."
[Email]: validators/Email.md "Validates an email address."
[Emoji]: validators/Emoji.md "Validates if the input is an emoji or a sequence of emojis."
[EndsWith]: validators/EndsWith.md "This validator is similar to `Contains()`, but validates"
[Equals]: validators/Equals.md "Validates if the input is equal to some value."
[Equivalent]: validators/Equivalent.md "Validates if the input is equivalent to some value."
[Even]: validators/Even.md "Validates whether the input is an even number or not."
[Executable]: validators/Executable.md "Validates if a file is an executable."
[Exists]: validators/Exists.md "Validates files or directories."
[Extension]: validators/Extension.md "Validates if the file extension matches the expected one:"
[Factor]: validators/Factor.md "Validates if the input is a factor of the defined dividend."
[Factory]: validators/Factory.md "Validates the input using a validator that is created from a callback."
[FalseVal]: validators/FalseVal.md "Validates if a value is considered as `false`."
[Falsy]: validators/Falsy.md "Validates whether the given input is considered empty or falsy, similar to PHP's `empty()` function."
[File]: validators/File.md "Validates whether file input is as a regular filename."
[Finite]: validators/Finite.md "Validates if the input is a finite number."
[FloatType]: validators/FloatType.md "Validates whether the type of the input is float."
[FloatVal]: validators/FloatVal.md "Validate whether the input value is float."
[Format]: validators/Format.md "Validates whether an input is already formatted as the result of applying a provided"
[Graph]: validators/Graph.md "Validates if all characters in the input are printable and actually creates"
[GreaterThan]: validators/GreaterThan.md "Validates whether the input is greater than a value."
[GreaterThanOrEqual]: validators/GreaterThanOrEqual.md "Validates whether the input is greater than or equal to a value."
[Hetu]: validators/Hetu.md "Validates a Finnish personal identity code (HETU)."
[HexRgbColor]: validators/HexRgbColor.md "Validates weather the input is a hex RGB color or not."
[Iban]: validators/Iban.md "Validates whether the input is a valid IBAN (International Bank Account"
[Identical]: validators/Identical.md "Validates if the input is identical to some value."
[Image]: validators/Image.md "Validates if the file is a valid image by checking its MIME type."
[Imei]: validators/Imei.md "Validates is the input is a valid IMEI."
[In]: validators/In.md "Validates if the input is contained in a specific haystack."
[Infinite]: validators/Infinite.md "Validates if the input is an infinite number."
[Instance]: validators/Instance.md "Validates if the input is an instance of the given class or interface."
[IntType]: validators/IntType.md "Validates whether the type of the input is integer."
[IntVal]: validators/IntVal.md "Validates if the input is an integer, allowing leading zeros and other number bases."
[Ip]: validators/Ip.md "Validates whether the input is a valid IP address."
[Isbn]: validators/Isbn.md "Validates whether the input is a valid ISBN or not."
[IterableType]: validators/IterableType.md "Validates whether the input is iterable, meaning that it matches the built-in compile time type alias `iterable`."
[IterableVal]: validators/IterableVal.md "Validates whether the input is an iterable value, in other words, if you can iterate over it with the foreach language construct."
[Json]: validators/Json.md "Validates if the given input is a valid JSON."
[Key]: validators/Key.md "Validates the value of an array against a given validator."
[KeyExists]: validators/KeyExists.md "Validates if the given key exists in an array."
[KeyOptional]: validators/KeyOptional.md "Validates the value of an array against a given validator when the key exists."
[KeySet]: validators/KeySet.md "Validates a keys in a defined structure."
[LanguageCode]: validators/LanguageCode.md "Validates whether the input is language code based on ISO 639."
[LeapDate]: validators/LeapDate.md "Validates if a date is leap."
[LeapYear]: validators/LeapYear.md "Validates if a year is leap."
[Length]: validators/Length.md "Validates the length of the given input against a given validator."
[LessThan]: validators/LessThan.md "Validates whether the input is less than a value."
[LessThanOrEqual]: validators/LessThanOrEqual.md "Validates whether the input is less than or equal to a value."
[Lowercase]: validators/Lowercase.md "Validates whether the characters in the input are lowercase."
[Luhn]: validators/Luhn.md "Validate whether a given input is a Luhn number."
[MacAddress]: validators/MacAddress.md "Validates whether the input is a valid MAC address."
[Masked]: validators/Masked.md "Decorates a validator to mask input values in error messages while still validating the original unmasked input."
[Max]: validators/Max.md "Validates the maximum value of the input against a given validator."
[Mimetype]: validators/Mimetype.md "Validates if the input is a file and if its MIME type matches the expected one."
[Min]: validators/Min.md "Validates the minimum value of the input against a given validator."
[Multiple]: validators/Multiple.md "Validates if the input is a multiple of the given parameter"
[Named]: validators/Named.md "Validates the input with the given validator, and uses the custom name in the error message."
[Negative]: validators/Negative.md "Validates whether the input is a negative number."
[NfeAccessKey]: validators/NfeAccessKey.md "Validates the access key of the Brazilian electronic invoice (NFe)."
[Nif]: validators/Nif.md "Validates Spain's fiscal identification number (NIF)."
[Nip]: validators/Nip.md "Validates whether the input is a Polish VAT identification number (NIP)."
[NoneOf]: validators/NoneOf.md "Validates if NONE of the given validators validate:"
[Not]: validators/Not.md "Negates any validator."
[NullOr]: validators/NullOr.md "Validates the input using a defined validator when the input is not `null`."
[NullType]: validators/NullType.md "Validates whether the input is null."
[Number]: validators/Number.md "Validates if the input is a number."
[NumericVal]: validators/NumericVal.md "Validates whether the input is numeric."
[ObjectType]: validators/ObjectType.md "Validates whether the input is an object."
[Odd]: validators/Odd.md "Validates whether the input is an odd number or not."
[OneOf]: validators/OneOf.md "Will validate if exactly one inner validator passes."
[Pesel]: validators/Pesel.md "Validates PESEL (Polish human identification number)."
[Phone]: validators/Phone.md "Validates whether the input is a valid phone number. This validator requires"
[Pis]: validators/Pis.md "Validates a Brazilian PIS/NIS number ignoring any non-digit char."
[PolishIdCard]: validators/PolishIdCard.md "Validates whether the input is a Polish identity card (Dowód Osobisty)."
[PortugueseNif]: validators/PortugueseNif.md "Validates Portugal's fiscal identification number (NIF)."
[Positive]: validators/Positive.md "Validates whether the input is a positive number."
[PostalCode]: validators/PostalCode.md "Validates whether the input is a valid postal code or not."
[Printable]: validators/Printable.md "Similar to `Graph` but accepts whitespace."
[Property]: validators/Property.md "Validates an object property against a given validator."
[PropertyExists]: validators/PropertyExists.md "Validates if an object property exists."
[PropertyOptional]: validators/PropertyOptional.md "Validates an object property against a given validator only if the property exists."
[PublicDomainSuffix]: validators/PublicDomainSuffix.md "Validates whether the input is a public ICANN domain suffix."
[Punct]: validators/Punct.md "Validates whether the input composed by only punctuation characters."
[Readable]: validators/Readable.md "Validates if the given data is a file exists and is readable."
[Regex]: validators/Regex.md "Validates whether the input matches a defined regular expression."
[ResourceType]: validators/ResourceType.md "Validates whether the input is a resource."
[Roman]: validators/Roman.md "Validates if the input is a Roman numeral."
[Satisfies]: validators/Satisfies.md "Validates the input using the return of a given callable."
[ScalarVal]: validators/ScalarVal.md "Validates whether the input is a scalar value or not."
[ShortCircuit]: validators/ShortCircuit.md "Validates the input against a series of validators, stopping at the first failure."
[Size]: validators/Size.md "Validates whether the input is a file that is of a certain size or not."
[Slug]: validators/Slug.md "Validates whether the input is a valid slug."
[Sorted]: validators/Sorted.md "Validates whether the input is sorted in a certain order or not."
[Space]: validators/Space.md "Validates whether the input contains only whitespaces characters."
[Spaced]: validators/Spaced.md "Validates if a string contains at least one whitespace (spaces, tabs, or line breaks);"
[StartsWith]: validators/StartsWith.md "Validates whether the input starts with a given value."
[StringType]: validators/StringType.md "Validates whether the type of an input is string or not."
[StringVal]: validators/StringVal.md "Validates whether the input can be used as a string."
[SubdivisionCode]: validators/SubdivisionCode.md "Validates subdivision country codes according to ISO 3166-2."
[Subset]: validators/Subset.md "Validates whether the input is a subset of a given value."
[SymbolicLink]: validators/SymbolicLink.md "Validates if the given input is a symbolic link."
[Templated]: validators/Templated.md "Defines a validator with a custom message template."
[Time]: validators/Time.md "Validates whether an input is a time or not. The `$format` argument should be in"
[Tld]: validators/Tld.md "Validates whether the input is a top-level domain."
[TrueVal]: validators/TrueVal.md "Validates if a value is considered as `true`."
[Undef]: validators/Undef.md "Validates if the given input is undefined. By _undefined_ we consider `null` or an empty string (`''`)."
[UndefOr]: validators/UndefOr.md "Validates the input using a defined validator when the input is not `null` or an empty string (`''`)."
[Unique]: validators/Unique.md "Validates whether the input array contains only unique values."
[Uppercase]: validators/Uppercase.md "Validates whether the characters in the input are uppercase."
[Url]: validators/Url.md "Validates whether the input is a valid URL in a popular internet format."
[Uuid]: validators/Uuid.md "Validates whether the input is a valid UUID. It also supports validation of"
[Version]: validators/Version.md "Validates version numbers using Semantic Versioning."
[Vowel]: validators/Vowel.md "Validates whether the input contains only vowels."
[When]: validators/When.md "A ternary validator that accepts three parameters."
[Writable]: validators/Writable.md "Validates if the given input is writable file."
[Xdigit]: validators/Xdigit.md "Validates whether the input is an hexadecimal number or not."