phpexperts / datatype-validator
An easy to use data type validator (both strict and fuzzy).
Installs: 421 728
Dependents: 2
Suggesters: 0
Security: 0
Stars: 11
Watchers: 3
Forks: 2
Open Issues: 2
Requires
- php: >=7.1
- ext-json: *
Requires (Dev)
- carbondate/carbon: ^1.33
- phpbench/phpbench: ^0.16.9
- phpstan/phpstan: ^0.11.6
- phpunit/phpunit: 7.*|8.*
- symfony/var-dumper: ^4.2
README
DataTypeValidator is a PHP Experts, Inc., Project designed for easy data type validation.
It supports both traditional, fuzzy, PHP data types (e.g., "1.0" can be both a float, int, and string) and strict data type validations ('1' is only a string, 1.0 is only a float, etc.).
Installation
Via Composer
composer require phpexperts/datatype-validator
Usage
// 1. Pick a Type Checker (IsAFuzzyDataType or IsAStrictDataType). // * IsAFuzzyDataType tries its best to emulate PHP's `==`. // * IsAStrictDataType observes PHP's `strict_types=1` rules. $validator = new DataValidator(new IsAStrictDataType()); // There are two powerful mechanisms out of the box: // 2. It is easy to validate any data type dynamically, without a ton of if statements. $validator->isType('asdf', 'string'); // true or false. $validator->assertIsType(1, 'int'); // null or throws InvalidDataTypeException // 3. You can also validate arrays: $data = [ 'name' => 'Cheyenne', 'age' => 22, 'birthday' => Carbon::parse('1996-12-04 15:15:15'), 'daysOld' => 8194.35, 'today' => Carbon::now(), 'sayHi' => function () { return 'Hi!'; }, ]; $rules = [ 'name' => 'string', 'age' => 'int', 'birthday' => 'Carbon', 'daysOld' => 'float', 'today' => 'Carbon\Carbon', 'sayHi' => 'callable', ]; $validator->validate($data, $rules); // 4. DataValidator::validate() will return `true` on success or throw // an `InvalidDataTypeException` that contains an array of errors: $data = [ 'name' => 'Cheyenne', 'age' => '22', 'birthday' => '1996-12-04 15:15:15', ]; try { $validator->validate($data, $rules); } catch (InvalidDataTypeException $e) { print_r($e->getReasons()); /* Output: array:2 [ 0 => "age is not a valid int" 1 => "birthday is not a valid Carbon" ] */ } // 5. It can validate objects based on their short name or full name. $data = [ 'yesterday' => \Carbon\Carbon::parse('2019-05-11'), 'tomorrow' => \Carbon\Carbon::parse('2019-05-13'), ]; $validator->validate($data, [ 'yesterday' => '\Carbon\Carbon', 'tomorrow' => 'Carbon', ]);
Benchmarks
phpbench run --report=aggregate
Use cases
PHPExperts\DataTypeValidator\DataTypeValidator
✔ Can bulk validate a data array
✔ Will return the name of the data validator logic
✔ Will return an array of invalid keys with explanations
✔ Will silently ignore data not in the rules
✔ Will silently ignore nullable rules with no data
✔ Data cannot be null by default
✔ Any data type that starts with a '?' is nullable
✔ Any data type that ends with '[]' is an array of X
✔ Will allow an empty array of something
✔ Will allow a nullable array of something
✔ Will throw a logic exception if a non string rule is given
PHPExperts\DataTypeValidator\DataTypeValidator: Assertions
✔ Will assert a value is a bool
✔ Will assert a value is an int
✔ Will assert a value is a float
✔ Will assert a value is a string
✔ Will assert a value is an array
✔ Will assert a value is an object
✔ Will assert a value is a callable
✔ Will assert a value is a resource
✔ Will assert an array of something
✔ Will assert an object by its short name
✔ Will assert an object by its full name
PHPExperts\DataTypeValidator\DataTypeValidator: Data Type Checks
✔ Will validate bools strictly
✔ Will validate ints strictly
✔ Will validate floats strictly
✔ Will validate strings strictly
✔ Will validate arrays strictly
✔ Will validate objects
✔ Will validate callables
✔ Will validate resources
✔ Will validate objects by their short name
✔ Will validate objects by their full name
✔ Can validate bools loosely
✔ Can validate ints loosely
✔ Can validate floats loosely
✔ Can validate strings loosely
✔ Can validate arrays loosely
✔ Will validate arrays of something
PHPExperts\DataTypeValidator\IsAFuzzyDataType
✔ Will return true for valid values
✔ Will return false for invalid values
✔ Will match short classes
✔ Will match specific classes
✔ Will work with an array of something
PHPExperts\DataTypeValidator\IsAStrictDataType
✔ Will return true for valid values
✔ Will return false for invalid values
✔ Will match short classes
✔ Will match specific classes
✔ Will work with an array of something
Testing
phpunit
Contributors
Theodore R. Smith theodore@phpexperts.pro
GPG Fingerprint: 4BF8 2613 1C34 87AC D28F 2AD8 EB24 A91D D612 5690
CEO: PHP Experts, Inc.
License
MIT license. Please see the license file for more information.