{"id":22092121,"url":"https://github.com/krakphp/validation","last_synced_at":"2025-07-24T20:31:59.743Z","repository":{"id":57009065,"uuid":"87373561","full_name":"krakphp/validation","owner":"krakphp","description":"PHP Validation made easy","archived":false,"fork":false,"pushed_at":"2018-08-05T10:29:39.000Z","size":70,"stargazers_count":3,"open_issues_count":6,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-07-23T00:38:05.896Z","etag":null,"topics":["assertion","fluent","functional","validation"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/krakphp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-04-06T01:42:22.000Z","updated_at":"2022-05-15T22:34:19.000Z","dependencies_parsed_at":"2022-08-21T13:10:48.616Z","dependency_job_id":null,"html_url":"https://github.com/krakphp/validation","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krakphp%2Fvalidation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krakphp%2Fvalidation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krakphp%2Fvalidation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krakphp%2Fvalidation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/krakphp","download_url":"https://codeload.github.com/krakphp/validation/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227476144,"owners_count":17779417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["assertion","fluent","functional","validation"],"created_at":"2024-12-01T03:08:22.810Z","updated_at":"2024-12-01T03:08:23.700Z","avatar_url":"https://github.com/krakphp.png","language":"PHP","readme":"# Krak Validation\n\nThe Krak Validation library is a functional and simple approach and interface to validation. It was made out of the need a validation library with a simple interface and configuration. Other leading validators like Respect, Zend, or Symfony have a lot of complexity in their API and adding an actual validator will require adding several classes in some instances.\n\nKrak Validation changes all of this by taking a functional approach to validation where every validator is just a function or instance of `Krak\\Validation\\Validator`. This design lends itself easily for extending, custom validators, and decorators. It comes bundled with a `Krak\\Validation\\Kernel` which manages validators to provide a simple, fluent, and customizable interface for utilizing validators.\n\n- [Installation](#installation)\n- [Usage](#usage)\n- [Validators](#validators)\n    - [Violations](#violations)\n    - [Throwing Violations](#throwing-violations)\n- [Validation Packages](#validation-packages)\n    - [Creating a Validation Package](#creating-a-validation-package)\n- [Core Validation Package](#core-validation-package)\n- [Doctrine Validation Package](#doctrine-validation-package)\n- [API](#api)\n\n\n## Installation\n\nInstall with composer at `krak/validation`\n\n## Usage\n\n```php\n\u003c?php\n\n$validation = new Krak\\Validation\\Kernel();\n$validator = $validation-\u003emake([\n    'name' =\u003e 'required|string',\n    'age' =\u003e 'optional|integer|between:18,25',\n]);\n$violations = $validator-\u003evalidate([\n    'name' =\u003e 'RJ',\n    'age' =\u003e 17,\n]);\n\nif ($violations) { // you can also check $validator-\u003efailed()\n    print_r($violations-\u003eformat()); // format into an array of error messages\n}\n```\n\nThis will print something like this:\n\n```\nArray\n(\n    [age] =\u003e Array\n        (\n            [0] =\u003e The Age field must be between 18 and 25\n        )\n\n)\n```\n\n## Validators\n\nA validator can be a `Krak\\Validation\\Validator`, or any callable that accepts a value and returns null on success and a violation on failure.\n\nValidators implement the following signature:\n\n```\nfunction($value, array $ctx = [])\n```\n\nThe second parameter can typically be left out, but is used to pass additional information into the validator. A good example is a PSR Container so that dependencies can be lazy loaded at time of actual validation.\n\n### Violations\n\nCreating violations is easy with the `violate` or `violations` function. For most validators, you'll simply be creating one violation.\n\n```php\n\u003c?php\n\nuse Krak\\Validation;\n\n/** enforces that a value equals a specific value */\nfunction equalsStringValidator($match) {\n    return function($value, array $ctx = []) use ($match) {\n        if ($value == $match) {\n            return;\n        }\n\n        return Validation\\violate('equals_string', [\n            'match' =\u003e $match\n        ]);\n    };\n}\n\n$v = equalsStringValidator('foo');\n$v('foo'); // returns null\n$violation = $v('bar'); // return a Krak\\Validation\\Violation\n```\n\nIn some cases, one validator can return multiple violations. In that case, we just use the `violations` to create a violation collection. You can checkout the `Krak\\Validation\\Validators\\collection` validator to see how to create a violation collection.\n\n### Throwing Violations\n\nOnce you have a violation or a violation collection, you can optionally throw them as exceptions to be handled upstream.\n\n```php\n\u003c?php\n\ntry {\n    $violation-\u003eabort();\n} catch (Krak\\Validation\\Exception\\ViolationException $e) {\n    assert($e-\u003eviolation === $violation);\n}\n```\n\n### Asserting Data\n\nA very common practice is using the Validation Kernel to make and validate domain data and then throw a ViolationException if any violations occur. This can be done simply via the `assert` method.\n\n```php\n$validation = new Krak\\Validation\\Kernel();\n$validation-\u003emake([\n    'name' =\u003e 'required|string',\n    'age' =\u003e 'optional|integer|between:18,25',\n])-\u003eassert(['name' =\u003e 'RJ', 'age' =\u003e 100]);\n// this will have thrown a ViolationException due to the age constraint\n```\n\nYou can then easily catch the `ViolationException` upstream and format the violation into readable errors:\n\n```php\ntry {\n    return response($storeUser($userData), 201);\n} catch (Krak\\Validation\\Exception\\ViolationException $e) {\n    return response([\n        'errors' =\u003e $e-\u003eviolation-\u003eformat(),\n    ], 422);\n}\n```\n\n## Validation Packages\n\nValidation Packages are simple extensions to the Validation\\Kernel that register validators and messages into the system.\n\n### Creating a Validation Package\n\nTo create a validation package, you need to extend the `ValidationPackage` interface.\n\n```php\ninterface ValidationPackage\n{\n    public function withValidation(Kernel $validation);\n}\n```\n\nFrom there, you can configure the validation kernel any which way you need.\n\nTypically, you'll just use the `validators`, `messages`, and `aliases` methods to add keyed validations and corresponding methods or aliases.\n\nAn example Validation Package would look like:\n\n```php\n\u003c?php\n\nuse Krak\\Validation;\n\nclass AcmeValidationPackage implements Validation\\ValidationPackage\n{\n    public function withValidation(Validation\\Kernel $v) {\n        $v-\u003evalidators([\n            'integer' =\u003e 'intValidator', // name of intValidator func\n            'min' =\u003e MinValidator::class // name of MinValidator class\n        ]);\n        $v-\u003emessages([\n            'integer' =\u003e 'The {{attribute}} is not a valid integer',\n            'min' =\u003e 'The {{attribute}} size must be greater than or equal to {{min}}',\n        ]);\n        $v-\u003ealiases([\n            'int' =\u003e 'integer',\n        ]);\n    }\n}\n```\n\nThe validators would be defined in different files like so:\n\n```php\nuse Krak\\Validation;\n\n// intValidator.php\nfunction intValidator() {\n    return function($v) {\n        return !is_int($v) ? Validation\\violate('integer') : null;\n    };\n}\n\n// MinValidator.php\nclass MinValidator implements Validation\\Validator\n{\n    private $min;\n\n    public function __construct($min) {\n        $this-\u003emin = $min;\n    }\n\n    public function validate($value, array $context = []) {\n        return $value \u003c $min ? Validation\\violate('min', ['min' =\u003e $this-\u003emin]) : null;\n    }\n}\n```\n\n## Core Validation Package\n\nThe Core Validation package defines a bunch of the normal useful validators.\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-all\"\u003eall\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-alpha\"\u003ealpha\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-alpha_num\"\u003ealpha_num\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-array\"\u003earray\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-between\"\u003ebetween\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-boolean\"\u003eboolean\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-date\"\u003edate\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-digits\"\u003edigits\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-double\"\u003edouble\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-email\"\u003eemail\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-exists\"\u003eexists\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-float\"\u003efloat\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-in\"\u003ein\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-integer\"\u003einteger\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-length\"\u003elength\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-max\"\u003emax\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-min\"\u003emin\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-null\"\u003enull\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-nullable\"\u003enullable\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-number\"\u003enumber\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-numeric\"\u003enumeric\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-optional\"\u003eoptional\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-regex\"\u003eregex\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-regex_exclude\"\u003eregex_exclude\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-required\"\u003erequired\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-string\"\u003estring\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cdiv id=\"validator-all\"\u003e\u003c/div\u003e\n\n### all\n\nValidates an array with the given validator. If any element in the array fails the validation, a violation will be returned.\n\n**Definition:** `Krak\\Validation\\Validators\\forAll($validator)`\n\n**Simple Usage:**\n\n```php\n$validator-\u003emake('all:integer')-\u003evalidate([1,2,3]);\n```\n\n**Advanced Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{forAll};\n$validator-\u003emake(forAll('integer|between:1,3'))-\u003evalidate([1,2,3])\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{forAll, typeInteger};\n\nforAll(typeInteger())([2,3]);\n```\n\n\u003cdiv id=\"validator-alpha\"\u003e\u003c/div\u003e\n\n### alpha\n\nWraps the `ctype_alpha` function and validates a string to verify only alpha characteres.\n\n**Definition:** `Krak\\Validation\\Validators\\alpha()`\n\n**Simple Usage:**\n\n```php\n$validator-\u003emake('alpha')-\u003evalidate('abc');\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{alpha};\n\nalpha()('123');\n```\n\n\n\u003cdiv id=\"validator-alpha_num\"\u003e\u003c/div\u003e\n\n### alpha_num\n\nWraps the `ctype_alnum` function and validates a string to make sure it's alpha numeric.\n\n**Definition:** `Krak\\Validation\\Validators\\alphaNum()`\n\n**Simple Usage:**\n\n```php\n$validator-\u003emake('alpah_num')-\u003evalidate('abc123');\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{alphaNum};\nalphaNum()('abc123');\n```\n\n\u003cdiv id=\"validator-array\"\u003e\u003c/div\u003e\n\n### array\n\nVerifies that the value is an array using `is_array`.\n\n**Definition:** `Krak\\Validation\\Validators\\typeArray()`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('array')-\u003evalidate();\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{typeArray};\n\ntypeArray()([]);\n```\n\n\u003cdiv id=\"validator-between\"\u003e\u003c/div\u003e\n\n### between\n\nValidates a value's [size](#tosizevalue) is between two values inclusively.\n\n**Definition:** `Krak\\Validation\\Validators\\between($min, $max)`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('between:1,2')-\u003evalidate(2);\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{between};\n\nbetween(1, 2)(2);\n```\n\n\u003cdiv id=\"validator-boolean\"\u003e\u003c/div\u003e\n\n### boolean\n\nValidates a value is a boolean. `true`, `false`, `\"0\"`, `\"1\"`, `0`, `1` are all instances of boolean.\n\n**Definition:** `Krak\\Validation\\Validators\\typeBoolean()`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('boolean')-\u003evalidate(true);\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{typeBoolean};\n\ntypeBoolean()(true);\n```\n\n\u003cdiv id=\"validator-date\"\u003e\u003c/div\u003e\n\n### date\n\nValidates a string is a valid date using `strototime`. Anything that `strtotime` accepts is accepted here.\n\n**Definition:** `Krak\\Validation\\Validators\\date()`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('date')-\u003evalidate('2017-08-11');\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{date};\n\ndate()('2017-08-11');\n```\n\n\u003cdiv id=\"validator-digits\"\u003e\u003c/div\u003e\n\n### digits\n\nValidates a string is of type digits using the `ctype_digits` function.\n\n**Definition:** `Krak\\Validation\\Validators\\digits()`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('digits')-\u003evalidate('123');\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{digits};\n\ndigits()('123');\n```\n\n\u003cdiv id=\"validator-double\"\u003e\u003c/div\u003e\n\n### double\n\nValidates a value is a double using `is_double`.\n\n**Definition:** `Krak\\Validation\\Validators\\double()`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('double')-\u003evalidate(4.2);\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{double};\n\ndouble()(4.2);\n```\n\n\u003cdiv id=\"validator-email\"\u003e\u003c/div\u003e\n\n### email\n\nValidates that a string matches an email regex.\n\n**Definition:** `Krak\\Validation\\Validators\\regexEmail()`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('email')-\u003evalidate('username@gmail.com');\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{regexEmail};\n\nregexEmail()('username@gmail.com');\n```\n\n\u003cdiv id=\"validator-exists\"\u003e\u003c/div\u003e\n\n### exists\n\nAlias of [`required`](#validator-requried).\n\n\u003cdiv id=\"validator-float\"\u003e\u003c/div\u003e\n\n### float\n\nValidates a value is a float using `is_float`.\n\n**Definition:** `Krak\\Validation\\Validators\\float()`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('float')-\u003evalidate(4.2);\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{float};\n\nfloat()(4.2);\n```\n\n\u003cdiv id=\"validator-in\"\u003e\u003c/div\u003e\n\n### in\n\nValidates if a values is within a given array.\n\n**Definition:** `Krak\\Validation\\Validators\\inArray`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('in:a,b,c')-\u003evalidate('b');\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{inArray};\n\ninArray(['a', 'b', 'c'])('b');\n```\n\n\u003cdiv id=\"validator-integer\"\u003e\u003c/div\u003e\n\n### integer\n\nValidates that a value is an integer.\n\n**Definition:** `Krak\\Validation\\Validators\\typeInteger()`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('integer')-\u003evalidate(1);\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{typeInteger};\n\ntypeInteger()(1);\n```\n\n\u003cdiv id=\"validator-length\"\u003e\u003c/div\u003e\n\n### length\n\nValidates that a value's [size](#sizetovalue) is exactly the given length.\n\n**Definition:** `Krak\\Validation\\Validators\\length($size)`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('length:3')-\u003evalidate('abc');\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{length};\n\nlength()('abc');\n```\n\n\u003cdiv id=\"validator-max\"\u003e\u003c/div\u003e\n\n### max\n\nValidates that a value's [size](#tosizevalue) is less than or equal to a given max.\n\n**Definition:** `Krak\\Validation\\Validators\\max($max)`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('max:5')-\u003evalidate(4);\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{max};\n\nmax(5)(4);\n```\n\n\u003cdiv id=\"validator-min\"\u003e\u003c/div\u003e\n\n### min\n\nValidates that a value's [size](#tosizevalue) is greater than or equal to a given min.\n\n**Definition:** `Krak\\Validation\\Validators\\min($min)`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('min:2')-\u003evalidate(3);\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{min};\n\nmin(2)(3);\n```\n\n\u003cdiv id=\"validator-null\"\u003e\u003c/div\u003e\n\n### null\n\nValidates that a value's type is null.\n\n**Definition:** `Krak\\Validation\\Validators\\typeNull()`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('null')-\u003evalidate(null);\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{typeNull};\n\ntypeNull()(null);\n```\n\n\u003cdiv id=\"validator-nullable\"\u003e\u003c/div\u003e\n\n### nullable\n\nValidates that a type is null or not. This is typically used in a chain of validators and will stop validation if the value is null or let the validation continue on else.\n\n**Definition:** `Krak\\Validation\\Validators\\nullable()`\n\n**Simple Usage:**\n\n```php\n$v = $validator-\u003emake('nullable|integer');\n$v-\u003evalidate(null);\n$v-\u003evalidate(1);\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{pipe, nullable, typeInteger};\n\n$v = pipe([nullable(), typeInteger()]);\n$v(null);\n$v(1);\n```\n\u003cdiv id=\"validator-number\"\u003e\u003c/div\u003e\n\n### number\n\nValidates that a given value is either a float, double, or integer. This is not the same as `is_numeric`.\n\n**Definition:** `Krak\\Validation\\Validators\\number()`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('number')-\u003evalidate(1);\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{number};\n\nnumber()(1);\n```\n\n\u003cdiv id=\"validator-numeric\"\u003e\u003c/div\u003e\n\n### numeric\n\nValidates that a given value is numeric using the `is_numeric` function.\n\n**Definition:** `Krak\\Validation\\Validators\\typeNumeric()`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('numeric')-\u003evalidate('1.5');\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{typeNumeric};\n\ntypeNumeric()('1.5');\n```\n\n\u003cdiv id=\"validator-optional\"\u003e\u003c/div\u003e\n\n### optional\n\nValidates that a keyed array is optional and is not required to be present in the array. This validator only make sense within the context of a collection.\n\n**Definition:** `Krak\\Validation\\Validators\\optional()`\n\n**Simple Usage:**\n```php\n$v = $validator-\u003emake([\n    'id' =\u003e 'optional|integer'\n]);\n$v-\u003evalidate([]);\n$v-\u003evalidate(['id' =\u003e 1])\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{collection, optional, typeInteger, pipe};\n\n$v = collection([\n    'id' =\u003e pipe([optional(), typeInteger()])\n]);\n$v([]);\n$v(['id' =\u003e 1]);\n```\n\n\n\u003cdiv id=\"validator-regex\"\u003e\u003c/div\u003e\n\n### regex\n\nValidates that a given value is either a float, double, or integer. This is not the same as `is_numeric`.\n\n**Definition:** `Krak\\Validation\\Validators\\regexMatch($regex, $exclude = false)`\n\n**Simple Usage:**\n\n```php\n$validator-\u003emake('regex:/a+b/')-\u003evalidate('aaab');\n```\n\n**Note** defining a regex via the string can be tricky because of how the validation rule parser will validate `|`, `:`, and `,`. You'll almost always want to call use actual validator itself.\n\n**Advanced Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{regexMatch};\n\n$validator-\u003emake(regexMatch('/(aa|bb)/'))-\u003evalidate('aa');\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{regexMatch};\n\nregexMatch('/(aa|bb)/')('aa');\n```\n\n\u003cdiv id=\"validator-regex_exclude\"\u003e\u003c/div\u003e\n\n### regex_exclude\n\nExactly like `regex` except it matches that the value excludes the specific regular expression.\n\n**Definition:** `Krak\\Validation\\Validators\\regexExclude($regex)`\n\n**Simple Usage:**\n\n```php\n$validator-\u003emake('regex:/a+b/')-\u003evalidate('c');\n```\n\n**Note** defining a regex via the string can be tricky because of how the validation rule parser will validate `|`, `:`, and `,`. You'll almost always want to call use actual validator itself.\n\n**Advanced Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{regexExclude};\n\n$validator-\u003emake(regexExclude('/(aa|bb)/'))-\u003evalidate('cc');\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{regexExclude};\n\nregexExclude('/(aa|bb)/')('cc');\n```\n\n\u003cdiv id=\"validator-required\"\u003e\u003c/div\u003e\n\n### required\n\nValidates that a given value is required in a collection. This validator only makes sense within the context of a collection.\n\n**Definition:** `Krak\\Validation\\Validators\\required()`\n\n**Simple Usage:**\n\n```php\n$validator-\u003emake([\n    'id' =\u003e 'required|integer',\n])-\u003evalidate(['id' =\u003e 1]);\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{collection, pipe, typeInteger, required};\n\ncollection([\n    'id' =\u003e pipe([required(), typeInteger()])\n])(['id' =\u003e 1]);\n```\n\n\u003cdiv id=\"validator-string\"\u003e\u003c/div\u003e\n\n### string\n\nValidates that a given value is a string.\n\n**Definition:** `Krak\\Validation\\Validators\\typeString()`\n\n**Simple Usage:**\n```php\n$validator-\u003emake('string')-\u003evalidate('a');\n```\n\n**Standalone Usage:**\n\n```php\nuse function Krak\\Validation\\Validators\\{typeString};\n\ntypeString()('a');\n```\n\n## Doctrine Validation Package\n\nThe Doctrine Validation Package defines doctrine related validators.\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-doctrine_all_exist\"\u003edoctrine_all_exist\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-doctrine_entities\"\u003edoctrine_entities\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-doctrine_entity\"\u003edoctrine_entity\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-doctrine_exists\"\u003edoctrine_exists\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-doctrine_unique\"\u003edoctrine_unique\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003ca href=\"#validator-doctrine_unique_entity\"\u003edoctrine_unique_entity\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\nTo enable the doctrine package, you can do the following:\n\n```php\n$validation = new Krak\\Validation\\Kernel();\n$validation-\u003ewithDoctrineValidators();\n// only needed for doctrine_entities, doctrine_entity, and doctrine_unique_entity\n$validation['Doctrine\\Common\\Persistence\\ObjectManager'] = function() {\n    // return a configured entity manager here...\n};\n$validation['Doctrine\\DBAL\\Connection'] = function() {\n    // return a dbal connection here\n};\n$validation-\u003econtext([\n    'doctrine.model_prefix' =\u003e Acme\\Model::class,\n]);\n```\n\n\u003cdiv id=\"validator-doctrine_all_exist\"\u003e\u003c/div\u003e\n\n### doctrine_all_exist\n\nValidates that a set of strings or integers all exist in a given table.\n\n**Definition:** `class Krak\\Validation\\Validators\\Doctrine\\AllExist($table_name, $field = 'id', $type = 'int')`\n\n**Simple Usage:**\n\n```php\n$validator-\u003emake('array|all:integer|doctrine_all_exist:users')-\u003evalidate([1,2,3]);\n```\n\n**Standalone Usage:**\n\n```php\nuse Krak\\Validation\\Validators\\Doctrine\\AllExist;\nuse function Krak\\Validation\\Validators\\{pipe, typeInteger, forAll};\n\npipe([forAll(typeInteger), new AllExist('users')])([1,2,3]);\n```\n\n\u003cdiv id=\"validator-doctrine_entities\"\u003e\u003c/div\u003e\n\n### doctrine_entities\n\nValidates that a a set of ORM Entities exist from a unique key. The given entity name is joined with the `doctrine.model_prefix` if one is given.\n\n**Definition:** `class Krak\\Validation\\Validators\\Doctrine\\Entities($entity_name, $field = 'id')`\n\n**Simple Usage:**\n\n```php\n$validator-\u003emake('array|all:integer|doctrine_entities:User')-\u003evalidate([1,2,3]);\n```\n\n**Standalone Usage:**\n\n```php\nuse Krak\\Validation\\Validators\\Doctrine\\Entities;\nuse function Krak\\Validation\\Validators\\{pipe, typeInteger, forAll};\n\npipe([forAll(typeInteger), new Entities('User')])([1,2,3]);\n```\n\n\u003cdiv id=\"validator-doctrine_entity\"\u003e\u003c/div\u003e\n\n### doctrine_entity\n\nValidates that an entity exists in the db with the given value.\n\n**Definition:** `class Krak\\Validation\\Validators\\Doctrine\\Entity($entity_name, $field = 'id')`\n\n**Simple Usage:**\n\n```php\n$validator-\u003emake('doctrine_entity:User')-\u003evalidate(1);\n```\n\n**Standalone Usage:**\n\n```php\nuse Krak\\Validation\\Validators\\Doctrine\\Entity;\n\n(new Entity('User'))-\u003evalidate(1);\n```\n\n\u003cdiv id=\"validator-doctrine_exists\"\u003e\u003c/div\u003e\n\n### doctrine_exists\n\nValidates that a given value exists in a table in a certain field.\n\n**Definition:** `class Krak\\Validation\\Validators\\Doctrine\\Exists($table_name, $field = 'id')`\n\n**Simple Usage:**\n\n```php\n$validator-\u003emake('doctrine_entity:users')-\u003evalidate(5);\n```\n\n**Standalone Usage:**\n\n```php\nuse Krak\\Validation\\Validators\\Doctrine\\Exists;\n\n(new Exists('users'))-\u003evalidate(5);\n```\n\n\u003cdiv id=\"validator-doctrine_unique\"\u003e\u003c/div\u003e\n\n### doctrine_unique\n\nValidates that a given value is unique and doesn't exist in a table in a field.\n\n**Definition:** `class Krak\\Validation\\Validators\\Doctrine\\Unique($table_name, $field = 'id')`\n\n**Simple Usage:**\n\n```php\n$validator-\u003emake('doctrine_unique:users,email')-\u003evalidate('username@gmail.com');\n```\n\n**Standalone Usage:**\n\n```php\nuse Krak\\Validation\\Validators\\Doctrine\\Unique;\n\n(new Unique('users', 'email'))-\u003evalidate('username@gmail.com');\n```\n\n\u003cdiv id=\"validator-doctrine_unique_entity\"\u003e\u003c/div\u003e\n\n### doctrine_unique_entity\n\nValidates that a given value exists in a table in a certain field.\n\n**Definition:** `class Krak\\Validation\\Validators\\Doctrine\\UniqueEntity($entity_name, $field = 'id')`\n\n**Simple Usage:**\n\n```php\n$validator-\u003emake('doctrine_unique_entity:User,email')-\u003evalidate('username@gmail.com');\n```\n\n**Standalone Usage:**\n\n```php\nuse Krak\\Validation\\Validators\\Doctrine\\UniqueEntity;\n\n(new UniqueEntity('User', 'email'))-\u003evalidate('username@gmail.com');\n```\n\n## API\n\nAll of the following are defined in the `Krak\\Validation\\Validators` namespace.\n\n### `collection($validators, $err_on_extra = true)`\n\nValidates a map of validators with attribute names mapping to other validators. `$err_on_extra` is a flag that will determine whether or not to validate if extra fields are in the input array.\n\nThis function will return either a Violation, ViolationCollection, or null depending on the input value.\n\n### `toSize($value)`\n\nGets the size of a variable. If string, it returns the string length. If array, it returns the count, else it assumes numeric and returns the value itself.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrakphp%2Fvalidation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkrakphp%2Fvalidation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrakphp%2Fvalidation/lists"}