nilportugues / validator
An efficient data validator for PHP
Requires (Dev)
- fabpot/php-cs-fixer: dev-master
- fiunchinho/phpunit-randomizer: 1.0.*@dev
- nilportugues/php_backslasher: ~0.2
- phpunit/phpunit: ~4.2
Suggests
- ext-mbstring: Multibyte String Functions
This package is not auto-updated.
Last update: 2024-12-21 17:27:51 UTC
README
Validation is a very common task in web applications. Data entered in forms needs to be validated. Data also needs to be validated before it is written into a database or passed to a web service.
NilPortugues\Validator is a simple, powerful and elegant stand-alone validation library with no external dependencies.
- 1. Installation
- 2. Usage
- 3. Validation Message Translation
- 4. Methods
- 4.1 isString | string
- [4.1.1. isAlphanumeric | alphanumeric] (#block4.1.1)
- [4.1.2. isAlpha | alpha] (#block4.1.2)
- [4.1.3. isBetween | between] (#block4.1.3)
- [4.1.4. isCharset | charset] (#block4.1.4)
- [4.1.5. isAllConsonants | all_consonants] (#block4.1.5)
- [4.1.6. contains] (#block4.1.6)
- [4.1.7. isControlCharacters | control_characters] (#block4.1.7)
- [4.1.8. isDigit | digit] (#block4.1.8)
- [4.1.9. endsWith | ends_with] (#block4.1.9)
- [4.1.10. equals] (#block4.1.10)
- [4.1.11. in] (#block4.1.11)
- [4.1.12. hasGraphicalCharsOnly | has_graphical_chars_only] (#block4.1.12)
- [4.1.13. hasLength | has_length] (#block4.1.13)
- [4.1.14. isLowercase | lowercase] (#block4.1.14)
- [4.1.15. notEmpty | not_empty] (#block4.1.15)
- [4.1.16. noWhitespace | no_whitespace] (#block4.1.16)
- [4.1.17. hasPrintableCharsOnly | has_printable_chars_only] (#block4.1.17)
- [4.1.18. isPunctuation | punctuation] (#block4.1.18)
- [4.1.19. matchesRegex | matches_regex] (#block4.1.19)
- [4.1.20. isSlug | slug] (#block4.1.20)
- [4.1.21. isSpace | space] (#block4.1.21)
- [4.1.22. startsWith | starts_with] (#block4.1.22)
- [4.1.23. isUppercase | uppercase] (#block4.1.23)
- [4.1.24. isVersion | version] (#block4.1.24)
- [4.1.25. isVowel | vowel] (#block4.1.25)
- [4.1.26. isHexDigit | hex_digit] (#block4.1.26)
- [4.1.27. hasLowercase | has_lowercase] (#block4.1.27)
- [4.1.28. hasUppercase | has_uppercase] (#block4.1.28)
- [4.1.29. hasNumeric | has_numeric] (#block4.1.29)
- [4.1.30. hasSpecialCharacters | has_special_characters] (#block4.1.30)
- [4.1.31. isEmail | email] (#block4.1.31)
- [4.1.32. isUrl | url] (#block4.1.32)
- [4.1.33. isUUID | uuid] (#block4.1.33)
- 4.2 isInteger | integer and isFloat | float
- [4.2.1. isNotZero | not_zero ] (#block4.2.1)
- [4.2.2. isPositive | positive] (#block4.2.2)
- [4.2.2. isPositiveOrZero | positive_or_zero] (#block4.2.3)
- [4.2.4. isNegative | negative] (#block4.2.4)
- [4.2.5. isNegativeOrZero | negative_or_zero] (#block4.2.5)
- [4.2.6. isBetween | between] (#block4.2.6)
- [4.2.7. isOdd | odd] (#block4.2.7)
- [4.2.8. isEven | even] (#block4.2.8)
- [4.2.9. isMultiple | multiple] (#block4.2.9)
- 4.3 isObject | object
- [4.3.1. isInstanceOf | instance_of] (#block4.3.1)
- [4.3.2. hasProperty | has_property] (#block4.3.2)
- [4.3.3. hasMethod | has_method] (#block4.3.3)
- [4.3.4. hasParentClass | has_parent_class] (#block4.3.4)
- [4.3.5. isChildOf | child_of] (#block4.3.5)
- [4.3.6. inheritsFrom | inherits_from] (#block4.3.6)
- [4.3.7. hasInterface | has_interface] (#block4.3.7)
- 4.4 isDateTime | date_time
- [4.4.1. isAfter | after] (#block4.4.1)
- [4.4.2. isBefore | before] (#block4.4.2)
- [4.4.3. isBetween | between] (#block4.4.3)
- [4.4.4. isWeekend | weekend] (#block4.4.4)
- [4.4.5. isWeekday | weekday] (#block4.4.5)
- [4.4.6. isMonday | monday] (#block4.4.6)
- [4.4.7. isTuesday | tuesday] (#block4.4.7)
- [4.4.8. isWednesday | wednesday] (#block4.4.8)
- [4.4.9. isThursday | thursday] (#block4.4.9)
- [4.4.10. isFriday | friday] (#block4.4.10)
- [4.4.11. isSaturday | saturday] (#block4.4.11)
- [4.4.12. isSunday | sunday] (#block4.4.12)
- [4.4.13. isToday | today] (#block4.4.13)
- [4.4.14. isYesterday | yesterday] (#block4.4.14)
- [4.4.15. isTomorrow | tomorrow] (#block4.4.15)
- [4.4.16. isLeapYear | leap_year] (#block4.4.16)
- [4.4.17. isMorning | morning] (#block4.4.17)
- [4.4.18. isAftenoon | aftenoon] (#block4.4.18)
- [4.4.19. isEvening | evening] (#block4.4.19)
- [4.4.20. isNight | night] (#block4.4.20)
- 4.5 isArray | array
- [4.5.1. each] (#block4.5.1)
- [4.5.2. hasKeyFormat | has_key_format] (#block4.5.2)
- [4.5.3. endsWith | ends_with] (#block4.5.3)
- [4.5.4. contains] (#block4.5.4)
- [4.5.5. hasKey | has_key] (#block4.5.5)
- [4.5.6. hasLength | has_length] (#block4.5.6)
- [4.5.7. isNotEmpty | not_empty] (#block4.5.7)
- [4.5.8. startsWith | starts_with] (#block4.5.8)
- 4.6 isFileUpload | file_upload
- [4.6.1. isBetween | between] (#block4.6.1)
- [4.6.2. isMimeType | mime_type] (#block4.6.2)
- [4.6.3. hasFileNameFormat | has_file_name_format] (#block4.6.3)
- [4.6.4. hasValidUploadDirectory | has_valid_upload_directory] (#block4.6.4)
- [4.6.5. notOverwritingExistingFile | not_overwriting_existing_file] (#block4.6.5)
- [4.6.6. hasLength | has_length] (#block4.6.6)
- [4.6.7. isImage | image] (#block4.6.7)
- 4.1 isString | string
- 4. Quality Code
- 5. Author
- 6. License
1. Installation ↑
The recommended way to install the Input Validator is through Composer. Run the following command to install it:
php composer.phar require nilportugues/validator
2. Usage ↑
The Validator interface is 100% human-friendly and readable. By default, it supports full validation and partial validation (stop when first error occurs).
2.1. Validation made for everyone ↑
When writing validator input data it is expected to be match a set of rules. If one or more of these rules fail, a collection of errors is returned. This is the default behaviour for validate($input)
.
NilPortugues\Validator supports up to 3 different styles to write validators: Instantiation, Factory or as a Class. Here's how you would validate an input age
for these 3 styles:
2.1.1. Instantiation of Validator class
use \NilPortugues\Validator\Validator; $ageValidator = Validator::create()->isInteger('age'); $result = $ageValidator->isPositive()->isBetween(18, 100, true)->validate(28); $errors = $ageValidator->getErrors();
2.1.2. Factory using ValidatorFactory::create
Using the Validator as a factory will provide a Validator object each time the ::create
method is used.
This style fits best when validating lots of fields one after another or inside array loops where changing $rules
dynamically can make sense.
use \NilPortugues\Validator\ValidatorFactory; $rules = ['positive', 'between:18:100:true']; $ageValidator = ValidatorFactory::create('age', 'integer', $rules); $result = $ageValidator->validate(28); $errors = $ageValidator->getErrors();
2.1.3. Extending from the BaseValidator
Validators extending from \NilPortugues\Validator\BaseValidator
are short and maintainable.
use \NilPortugues\Validator\BaseValidator; class AgeValidator extends BaseValidator { /** * @var string */ protected $type = 'integer'; /** * @var array */ protected $rules = [ 'positive', 'between:18:100:true' ]; } $ageValidator = new AgeValidator(); $result = $ageValidator->validate('age', 28); $errors = $ageValidator->getErrors();
Rules cannot be dynamically changed unless you provide the class a method to do so! For instance:
use \NilPortugues\Validator\BaseValidator; class AgeValidator extends BaseValidator { /** * @var string */ protected $type = 'integer'; /** * @var array */ protected $rules = ['positive']; /** * @param array $rules */ public function __construct(array $rules) { $this->rules = array_merge($this->rules, $rules); } } $ageValidator = new AgeValidator(['between:18:100:true']); $result = $ageValidator->validate('age', 28); $errors = $ageValidator->getErrors();
2.2. Stop on first error ↑
Sometimes, fast validation checks are needed when validating input data. This is possible by passing true
as the second argument to the validate
method.
For instance, in the following code isBetween
is never executed.
use \NilPortugues\Validator\Validator; $age = Validator::create()->isInteger('age'); $result = $age->isPositive()->isBetween(0, 100, true)->validate(-10, true);
3. Validation Message Translation ↑
The Input Validator features a default translation that can be found at src/Errors/en_GB.php
. If no file path is provided when creating the validator instance, this file is used.
Feel free to submit a pull request or open an issue with more translations!
Customization
Language can be changed anytime by providing a file following the same structure.
$translationFile = 'full/path/to/alternate-translation.php'; $validator = Validator::create($translationFile); $stringValidator = $validator->isString('username'); $errors = $stringValidator->getErrors(); //error array in the provided language.
Available translations
- en_GB English (British)
4. Methods ↑
All data type validators share 2 basic methods:
- isRequired
- isNotNull
Its usage is fairly simple:
$validator = Validator::create(); $username = $validator->isString('username'); $username->isRequired()->validate('Nil'); //true $username->isNotNull()->validate(''); //false //Or combined... $username->isRequired()->isNotNull()->validate('Nil'); //true
For optional data, wrap the validator function within an if with an isset($value)
clause and validate using isNotNull
.
For instance, suppose gender is a value from 0 to 2 (male, female, other) and is a non-mandatory value:
$validator = Validator::create(); $genderValue = $validator->isInteger('gender'); $result = true; if (isset($gender)) { $result = $genderValue->isNotNull()->isBetween(0, 2, true)->validate($gender); } return $result;
4.1 isString | string ↑
String validation starts when creating a string field in the validator using the isString
method.
$username = Validator::create()->isString('username');
The following chainable validation options are available for string data:
4.1.1. isAlphanumeric ↑
4.1.1.1 Instantiation of Validator class
use \NilPortugues\Validator\Validator; $string = Validator::create()->isString('propertyName'); $string->isAlphanumeric()->validate('28a'); // true $string->isAlphanumeric()->validate('hello@example.com'); // false
4.1.1.2. Factory using Validator::create
use \NilPortugues\Validator\Validator; $validator = Validator::create('propertyName', 'string', ['alphanumeric']); $validator->validate('28a'); // true $validator->validate('hello@example.com'); // false
4.1.1.3. Extending from the BaseValidator
use \NilPortugues\Validator\BaseValidator; class FieldValidator extends BaseValidator { protected $type = 'string'; protected $rules = ['alphanumeric']; } $fieldValidator = new FieldValidator(); $fieldValidator->validate('propertyName', '28a'); //true $fieldValidator->validate('propertyName', 'hello@example.com');
4.1.2. isAlpha ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isAlpha()->validate('Hello World'); // true $string->isAlpha()->validate('28a'); // false $string->isAlpha()->validate('hello@example.com'); // false
4.1.3. isBetween ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isBetween(2, 4)->validate('Nilo'); //false $string->isBetween(2, 4, true)->validate('Nilo'); //true
4.1.4. isCharset ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isCharset(['UTF-8'])->validate('Portugués'); //true
4.1.5. isAllConsonants ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isAllConsonants()->validate('a'); //false $string->isAllConsonants()->validate('bs'); //true
4.1.6. contains ↑
Example
$string = Validator::create()->isString('propertyName'); $string->contains(123)->validate('AAAAAAA123A'); //true $string->contains(123, true)->validate('AAAAAAA123A'); //false
4.1.7. isControlCharacters ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isControlCharacters()->validate("\n\t"); //true $string->isControlCharacters()->validate("\nHello\tWorld"); //false
4.1.8. isDigit ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isDigit()->validate('10'); //true $string->isDigit()->validate('A'); //false $string->isDigit()->validate(145.6); //false
4.1.9. endsWith ↑
Example
$string = Validator::create()->isString('propertyName'); $string->endsWith('aaaA')->validate('AAAAAAAaaaA'); //true $string->endsWith(123, true)->validate('AAAAAAA123'); //false
4.1.10. equals ↑
Example
$string = Validator::create()->isString('propertyName'); $string->equals('hello')->validate('hello'); //true $string->equals(1)->validate('1'); //true $string->equals(1, true)->validate('1'); //false
4.1.11. in ↑
Example
$string = Validator::create()->isString('propertyName'); $string->in('a12245 asdhsjasd 63-211', true)->validate('5 asd'); //true $string->in(122, true)->validate('a12245 asdhsjasd 63-211'); //false
4.1.12. hasGraphicalCharsOnly ↑
Example
$string = Validator::create()->isString('propertyName'); $string->hasGraphicalCharsOnly()->validate('arf12'); //true $string->hasGraphicalCharsOnly()->validate("asdf\n\r\t"); //false
4.1.13. hasLength ↑
Example
$string = Validator::create()->isString('propertyName'); $string->hasLength(5)->validate('abcdefgh'); //false $string->hasLength(8)->validate('abcdefgh'); //true
4.1.14. isLowercase ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isLowercase()->validate('strtolower'); //true $string->isLowercase()->validate('strtolOwer'); //false
4.1.15. notEmpty ↑
Example
$string = Validator::create()->isString('propertyName'); $string->notEmpty()->validate('a'); //true $string->notEmpty()->validate(''); //false
4.1.16. noWhitespace ↑
Example
$string = Validator::create()->isString('propertyName'); $string->noWhitespace()->validate('aaaaa'); //true $string->noWhitespace()->validate('lorem ipsum'); //false
4.1.17. hasPrintableCharsOnly ↑
Example
$string = Validator::create()->isString('propertyName'); $string->hasPrintableCharsOnly()->validate("LMKA0$%_123"); //true $string->hasPrintableCharsOnly()->validate("LMKA0$%\t_123"); //false
4.1.18. isPunctuation ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isPunctuation()->validate('&,.;'); //true $string->isPunctuation()->validate('a'); //false
4.1.19. matchesRegex ↑
Example
$string = Validator::create()->isString('propertyName'); $string->matchesRegex('/[a-z]/')->validate('a'); //true $string->matchesRegex('/[a-z]/')->validate('A'); //false
4.1.20. isSlug ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isSlug()->validate('hello-world-yeah'); //true $string->isSlug()->validate('-hello-world-yeah'); //false $string->isSlug()->validate('hello-world-yeah-'); //false $string->isSlug()->validate('hello-world----yeah'); //false
4.1.21. isSpace ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isSpace()->validate(' '); //true $string->isSpace()->validate('e e'); //false
4.1.22. startsWith ↑
Example
$string = Validator::create()->isString('propertyName'); $string->startsWith('aaaA')->validate('aaaAAAAAAAA'); //true $string->startsWith(123, true)->validate('123AAAAAAA'); //false
4.1.23. isUppercase ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isUppercase()->validate('AAAAAA'); //true $string->isUppercase()->validate('aaaa'); //false
4.1.24. isVersion ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isVersion()->validate('1.0.2'); //true $string->isVersion()->validate('1.0.2-beta'); //true $string->isVersion()->validate('1.0'); //true $string->isVersion()->validate('1.0.2 beta'); //false
4.1.25. isVowel ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isVowel()->validate('aeA'); //true $string->isVowel()->validate('cds'); //false
4.1.26. isHexDigit ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isHexDigit()->validate(100); //true $string->isHexDigit()->validate('h0000'); //false
4.1.27. hasLowercase ↑
Example
$string = Validator::create()->isString('propertyName'); $string->hasLowercase()->validate('HELLOWOrLD'); //true $string->hasLowercase(3)->validate('HeLLoWOrLD'); //true $string->hasLowercase()->validate('HELLOWORLD'); //false $string->hasLowercase(3)->validate('el'); //false
4.1.28. hasUppercase ↑
Example
$string = Validator::create()->isString('propertyName'); $string->hasUppercase()->validate('hello World'); //true $string->hasUppercase(2)->validate('Hello World'); //true $string->hasUppercase()->validate('hello world'); //false $string->hasUppercase(2)->validate('helloWorld'); //false
4.1.29. hasNumeric ↑
Example
$string = Validator::create()->isString('propertyName'); $string->hasNumeric()->validate('hell0 W0rld'); //true $string->hasNumeric(3)->validate('H3ll0 W0rld'); //true $string->hasNumeric()->validate('hello world'); //false $string->hasNumeric(2)->validate('h3lloWorld'); //false
4.1.30. hasSpecialCharacters ↑
Example
$string = Validator::create()->isString('propertyName'); $string->hasSpecialCharacters()->validate('hell0@W0rld'); //true $string->hasSpecialCharacters(2)->validate('H3ll0@W0@rld'); //true $string->hasSpecialCharacters()->validate('hello world'); //false $string->hasSpecialCharacters(2)->validate('h3llo@World'); //false
4.1.31. isEmail ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isEmail()->validate('hello@world.com'); //true $string->isEmail()->validate('hello.earth@world.com'); //true $string->isEmail()->validate('hello.earth+moon@world.com'); //true $string->isEmail()->validate('hello@subdomain.world.com'); //true $string->isEmail()->validate('hello.earth@subdomain.world.com'); //true $string->isEmail()->validate('hello.earth+moon@subdomain.world.com'); //true $string->isEmail()->validate('hello.earth+moon@127.0.0.1'); //true $string->isEmail()->validate('hello.earth+moon@localhost'); //false
4.1.32. isUrl ↑
Example
$string = Validator::create()->isString('propertyName'); $string->->isUrl()->validate('http://google.com'); //true $string->->isUrl()->validate('http://google.com/robots.txt'); //true $string->->isUrl()->validate('https://google.com'); //true $string->->isUrl()->validate('https://google.com/robots.txt'); //true $string->->isUrl()->validate('//google.com'); //true $string->->isUrl()->validate('//google.com/robots.txt'); //true
4.1.33. isUUID($strict = true) ↑
Example
$string = Validator::create()->isString('propertyName'); $string->isUUID()->validate('6ba7b810-9dad-11d1-80b4-00c04fd430c8'); //true $string->isUUID()->validate('6ba7b811-9dad-11d1-80b4-00c04fd430c8'); //true $string->isUUID()->validate('6ba7b812-9dad-11d1-80b4-00c04fd430c8'); //true $string->isUUID()->validate('6ba7b814-9dad-11d1-80b4-00c04fd430c8'); //true $string->isUUID()->validate('00000000-0000-0000-0000-000000000000'); //true $string->isUUID(false)->validate('6ba7b810-9dad-11d1-80b4-00c04fd430c8'); //true $string->isUUID(false)->validate('6ba7b811-9dad-11d1-80b4-00c04fd430c8'); //true $string->isUUID(false)->validate('6ba7b812-9dad-11d1-80b4-00c04fd430c8'); //true $string->isUUID(false)->validate('6ba7b814-9dad-11d1-80b4-00c04fd430c8'); //true $string->isUUID(false)->validate('00000000-0000-0000-0000-000000000000'); //true $string->isUUID()->validate('{6ba7b810-9dad-11d1-80b4-00c04fd430c8}'); //false $string->isUUID()->validate('216f-ff40-98d9-11e3-a5e2-0800-200c-9a66'); //false $string->isUUID()->validate('{216fff40-98d9-11e3-a5e2-0800200c9a66}'); //false $string->isUUID()->validate('216fff4098d911e3a5e20800200c9a66'); //false $string->isUUID(false)->validate('{6ba7b810-9dad-11d1-80b4-00c04fd430c8}'); //true $string->isUUID(false)->validate('216f-ff40-98d9-11e3-a5e2-0800-200c-9a66'); //true $string->isUUID(false)->validate('{216fff40-98d9-11e3-a5e2-0800200c9a66}'); //true $string->isUUID(false)->validate('216fff4098d911e3a5e20800200c9a66'); //true
4.2 isInteger | integer and isFloat | float ↑
Number validation comes in two flavours, Integers
and Floats
. Both validators share the same method interface, but internal implementation is different.
To use these validators, do as follows:
$integer = Validator::create()->isInteger('propertyName'); $float = $validator->isFloat('propertyName');
4.2.1. isNotZero ↑
Example
$integer = Validator::create()->isInteger('propertyName'); $integer->isNotZero()->validate(1); //true $integer->isNotZero()->validate(0); //false
4.2.2. isPositive ↑
Example
$integer = Validator::create()->isInteger('propertyName'); $integer->isPositive()->validate(1); //true $integer->isPositive()->validate(-10); //false $integer->isPositive()->validate(0); //false
4.2.3. isPositiveOrZero ↑
Example
$integer = Validator::create()->isInteger('propertyName'); $integer->isPositiveOrZero()->validate(1); //true $integer->isPositiveOrZero()->validate(-10); //false $integer->isPositiveOrZero()->validate(0); //true
4.2.4. isNegative ↑
Example
$integer = Validator::create()->isInteger('propertyName'); $integer->isNegative()->validate(-10); //true $integer->isNegative()->validate(1); //false $integer->isNegative()->validate(0); //false
4.2.5. isNegativeOrZero ↑
Example
$integer = Validator::create()->isInteger('propertyName'); $integer->isNegativeOrZero()->validate(-10); //true $integer->isNegativeOrZero()->validate(1); //false $integer->isNegativeOrZero()->validate(0); //true
4.2.6. isBetween ↑
Example
$integer = Validator::create()->isInteger('propertyName'); $integer->isBetween(10,20, false)->validate(13); //true $integer->isBetween(10, 20, true)->validate(10); //false
4.2.7. isOdd ↑
Example
$integer = Validator::create()->isInteger('propertyName'); $integer->isOdd()->validate(3); //true $integer->isOdd()->validate(2); //false
4.2.8. isEven ↑
Example
$integer = Validator::create()->isInteger('propertyName'); $integer->isEven()->validate(2); //true $integer->isEven()->validate(3); //false
4.2.9. isMultiple ↑
Example
$integer = Validator::create()->isInteger('propertyName'); $integer->isMultiple(2)->validate(4); //true $integer->isMultiple(2)->validate(3); //false
4.3 isObject | object ↑
4.3.1. isInstanceOf ↑
Example
$object = Validator::create()->isObject('propertyName'); $object->isInstanceOf('DateTime')->validate(new \DateTime()); //true $object->isInstanceOf('DateTime')->validate(new \stdClass()); //false $object->isInstanceOf('DateTime')->validate('a'); //false
4.3.2. hasProperty ↑
Example
$object = Validator::create()->isObject('propertyName'); $dummy = new Dummy(); $object->hasProperty('userName')->validate($dummy); //true $object->hasProperty('password')->validate($dummy); //false
4.3.3. hasMethod ↑
Example
$object = Validator::create()->isObject('propertyName'); $dummy = new Dummy(); $object->hasMethod('getUserName')->validate($dummy); //true $object->hasMethod('getPassword')->validate($dummy); //false
4.3.4. hasParentClass ↑
Example
$object = Validator::create()->isObject('propertyName'); $object->hasParentClass()->validate(new Dummy()); //true $object->hasParentClass()->validate(new \stdClass()); //false
4.3.5. isChildOf ↑
Example
$object = Validator::create()->isObject('propertyName'); $dummy = new Dummy(); // class Dummy extends \DateTime $object->isChildOf('DateTime')->validate($dummy); //true $object->isChildOf('DateTimeZone')->validate($dummy); //false
4.3.6. inheritsFrom ↑
Example
$object = Validator::create()->isObject('propertyName'); $dummy = new Dummy(); // class Dummy extends \DateTime $object->inheritsFrom('DateTime')->validate($dummy); //true $object->inheritsFrom('DateTimeZone')->validate($dummy); //false
4.3.7. hasInterface ↑
Example
$object = Validator::create()->isObject('propertyName'); $object->hasInterface('Tests\NilPortugues\Validator\Resources\DummyInterface')->validate($dummy); //true $object->inheritsFrom('DateTimeZone')->validate($dummy); //false
4.4 isDateTime | date_time ↑
DateTime Validator accepts \DateTime
objects and strings
variables representing valid date formats.
As you will see in the following examples, either two are allowed as parameters for any date
value.
4.4.1. isAfter ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $date1 = '2014-01-01 00:00:00'; $date2 = new \DateTime($date1); $limit1 = '2013-12-31 23:59:59'; $datetime->isAfter($limit1, false)->validate($date1); // true $datetime->isAfter($limit1, false)->validate($date2); // true $datetime->isAfter($date1, true)->validate($date1); // true $datetime->isAfter($date2, true)->validate($date2); // true $limit2 = '2015-01-01 00:00:00'; $datetime->isAfter($limit2)->validate($date1); // false $datetime->isAfter($limit2)->validate($date2); // false
4.4.2. isBefore ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $date1 = '2012-01-01 00:00:00'; $date2 = new \DateTime($date1); $limit1 = '2013-12-31 23:59:59'; $datetime->isBefore($limit1, false)->validate($date1); // true $datetime->isBefore($limit1, false)->validate($date2); // true $datetime->isBefore($date1, true)->validate($date1); // true $datetime->isBefore($date2, true)->validate($date2); // true $limit2 = '2010-01-01 00:00:00'; $datetime->isBefore($limit2)->validate($date1); // false $datetime->isBefore($limit2)->validate($date2); // false
4.4.3. isBetween ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $date1 = '2014-01-01 00:00:00'; $date2 = new \DateTime($date1); $minDate = '2013-01-01 00:00:00'; $maxDate = '2015-01-01 00:00:00'; $datetime->isBetween($minDate, $maxDate, false)->validate($date1); // true $datetime->isBetween($minDate, $maxDate, false)->validate($date2); // true $datetime->isBetween($minDate, $maxDate, true)->validate($date1); // true $datetime->isBetween($minDate, $maxDate, true)->validate($date2); // true $minDate = '2013-12-01 00:00:00'; $maxDate = '2013-12-30 00:00:00'; $datetime->isBetween($minDate, $maxDate, false)->validate($date1); // false $datetime->isBetween($minDate, $maxDate, true)->validate($date1); // false
4.4.4. isWeekend ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $datetime->isWeekend()->validate('2014-09-20'); // true $datetime->isWeekend()->validate('2014-09-22'); // false
4.4.5. isWeekday ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $datetime->isWeekday()->validate('2014-09-20'); // false $datetime->isWeekday()->validate('2014-09-22'); // true
4.4.6. isMonday ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $datetime->isMonday()->validate('2014-09-22'); // true
4.4.7. isTuesday ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $datetime->isTuesday()->validate('2014-09-23'); // true
4.4.8. isWednesday ↑
Example
$validator = Validator::create(); $datetime = $validator->isDateTime('propertyName'); $datetime->isWednesday()->validate('2014-09-24'); // true
4.4.9. isThursday ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $datetime->isThursday()->validate('2014-09-25'); // true
4.4.10. isFriday ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $datetime->isFriday()->validate('2014-09-26'); // true
4.4.11. isSaturday ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $datetime->isSaturday()->validate('2014-09-27'); // true
4.4.12. isSunday ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $datetime->isSunday()->validate('2014-09-28'); // true
4.4.13. isToday ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $date = new \DateTime('now'); $datetime->isToday()->validate($date); // true
4.4.14. isYesterday ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $date = new \DateTime('now -1 day'); $datetime->isYesterday()->validate($date); // true
4.4.15. isTomorrow ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $date = new \DateTime('now +1 day'); $datetime->isTomorrow()->validate($date); // true
4.4.16. isLeapYear ↑
Example
$datetime = Validator::create()->isDateTime('propertyName'); $date = new \DateTime('2016-01-01'); $datetime->isLeapYear()->validate($date); // true
4.4.17. isMorning ↑
Example
$datetime = Validator::create()->isDateTime('propertyName');
4.4.18. isAftenoon ↑
Example
$datetime = Validator::create()->isDateTime('propertyName');
4.4.19. isEvening ↑
Example
$datetime = Validator::create()->isDateTime('propertyName');
4.4.20. isNight ↑
Example
$datetime = Validator::create()->isDateTime('propertyName');
4.5 isArray | array ↑
Collections are data structures that hold other data structures or same type variables.
Supported PHP data structures for the Collection validator are:
- array
- ArrayObject
- SplFixedArray
4.5.1. each ↑
Example
$validator = Validator::create(); $collection = $validator->isArray('propertyName'); $valueIsString = $validator->isString('value')->isAlpha(); $keyIsInteger = $validator->isInteger('key')->isPositive(); $array = ['hello','world']; $arrayObject = new \ArrayObject($array); $fixedArray = (new \SplFixedArray())->fromArray($array); $collection->each($valueIsString)->validate($array); //true $collection->each($valueIsString, $keyIsInteger)->validate($array); //true $collection->each($valueIsString)->validate($arrayObject); //true $collection->each($valueIsString, $keyIsInteger)->validate($arrayObject); //true $collection->each($valueIsString)->validate($fixedArray); //true $collection->each($valueIsString, $keyIsInteger)->validate($fixedArray); //true
4.5.2. hasKeyFormat ↑
Example
$validator = Validator::create(); $collection = $validator->isArray('propertyName'); $array = ['one' => 'hello', 'two' => 'world']; $arrayObject = new \ArrayObject($array); $fixedArray = (new \SplFixedArray())->fromArray(array_values($array)); $keyIsString = $validator->isString('key')->isAlpha(); $keyIsInteger = $validator->isInteger('key')->isPositive(); $collection->hasKeyFormat($keyIsString)->validate($array); //true $collection->hasKeyFormat($keyIsString)->validate($arrayObject); //true $collection->hasKeyFormat($keyIsInteger)->validate($fixedArray); //true
4.5.3. endsWith ↑
Example
$collection = Validator::create()->isArray('propertyName'); $array = ['one' => 'hello', 'two' => 1]; $arrayObject = new \ArrayObject($array); $fixedArray = (new \SplFixedArray())->fromArray(array_values($array)); $collection->endsWith('1')->validate($array); //true $collection->endsWith('1')->validate($arrayObject); //true $collection->endsWith('1')->validate($fixedArray); //true $collection->endsWith('1', true)->validate($array); //false $collection->endsWith('1', true)->validate($arrayObject); //false $collection->endsWith('1', true)->validate($fixedArray); //false
4.5.4. contains ↑
Example
$collection = Validator::create()->isArray('propertyName'); $array = ['one' => 'hello', 'two' => 1]; $arrayObject = new \ArrayObject($array); $fixedArray = (new \SplFixedArray())->fromArray(array_values($array)); $collection->contains('hello')->validate($array); //true $collection->contains('hello')->validate($arrayObject); //true $collection->contains('hello')->validate($fixedArray); //true $collection->contains(1, true)->validate($array); //true $collection->contains(1, true)->validate($arrayObject); //true $collection->contains(1, true)->validate($fixedArray); //true
4.5.5. hasKey ↑
Example
$collection = Validator::create()->isArray('propertyName'); $array = ['one' => 'hello', 'two' => 1]; $arrayObject = new \ArrayObject($array); $fixedArray = (new \SplFixedArray())->fromArray(array_values($array)); $collection->hasKey('one')->validate($array)); //true $collection->hasKey('one')->validate($arrayObject)); //true $collection->hasKey(0)->validate($fixedArray)); //true $array = []; $arrayObject = new \ArrayObject($array); $fixedArray = (new \SplFixedArray())->fromArray(array_values($array)); $collection->hasKey(0)->validate($array)); //false $collection->hasKey(0)->validate($arrayObject)); //false $collection->hasKey(0)->validate($fixedArray)); //false
4.5.6. hasLength ↑
Example
$collection = Validator::create()->isArray('propertyName'); $array = ['one' => 'hello', 'two' => 1]; $arrayObject = new \ArrayObject($array); $fixedArray = (new \SplFixedArray())->fromArray(array_values($array)); $collection->hasLength(2)->validate($array)); //true $collection->hasLength(2)->validate($arrayObject)); //true $collection->hasLength(2)->validate($fixedArray)); //true $array = []; $arrayObject = new \ArrayObject($array); $fixedArray = (new \SplFixedArray())->fromArray(array_values($array)); $collection->hasLength(0)->validate($array)); //true $collection->hasLength(0)->validate($arrayObject)); //true $collection->hasLength(0)->validate($fixedArray)); //true
4.5.7. isNotEmpty ↑
Example
$collection = Validator::create()->isArray('propertyName'); $array = ['one' => 'hello', 'two' => 1]; $arrayObject = new \ArrayObject($array); $fixedArray = (new \SplFixedArray())->fromArray(array_values($array)); $collection->isNotEmpty()->validate($array)); //true $collection->isNotEmpty()->validate($arrayObject)); //true $collection->isNotEmpty()->validate($fixedArray)); //true $array = []; $arrayObject = new \ArrayObject($array); $fixedArray = (new \SplFixedArray())->fromArray(array_values($array)); $collection->isNotEmpty()->validate($array)); //false $collection->isNotEmpty()->validate($arrayObject)); //false $collection->isNotEmpty()->validate($fixedArray)); //false
4.5.8. startsWith ↑
Example
$collection = Validator::create()->isArray('propertyName'); $array = [1, 2, 3]; $arrayObject = new \ArrayObject($array); $fixedArray = (new \SplFixedArray())->fromArray($array); $collection->startsWith(1)->validate($array)); //true $collection->startsWith(1)->validate($arrayObject)); //true $collection->startsWith(1)->validate($fixedArray)); //true $collection->startsWith('1', true)->validate($array)); //false $collection->startsWith('1', true)->validate($arrayObject)); //false $collection->startsWith('1', true)->validate($fixedArray)); //false
4.6 isFileUpload | file_upload ↑
FileUpload validation is one of the most boring parts of web development, but this validator makes things a breeze.
One file validation
Using FileUpload validator alone, you can validate single file uploads.
<form method="POST" enctype="multipart/form-data"> <input name="image" type="file" accept="image/*"> <input type="submit" value="Submit"> </form>
On the server side, validation is done as follows:
$fileValidator = Validator::create()->isFileUpload('image'); $fileValidator ->isBetween(0, 3, 'MB', true) ->isMimeType(['image/png', 'image/gif', 'image/jpeg']) ->hasValidUploadDirectory('./uploads/images') ->notOverwritingExistingFile('./uploads/images') ->validate('image');
Multiple file validation
For instance, let's say file upload is done using the following form:
<form method="POST" enctype="multipart/form-data"> <input type="file" name="image[]" multiple="multiple" accept="image/*"> <input type="submit" value="Submit"> </form>
On the server side it is done exactly the same as before! Easy, right? :)
4.6.1. isBetween($minSize, $maxSize, $inclusive = false) ↑
Example
$file = Validator::create()->isFileUpload('image'); $file->isBetween(1, 3, 'MB', true)->validate('image');
4.6.2. isMimeType(array $allowedTypes) ↑
Example
$file = Validator::create()->isFileUpload('image'); $file->isMimeType(['image/png', 'image/gif', 'image/jpeg'])->validate('image');
4.6.3. hasFileNameFormat(AbstractValidator $validator) ↑
Example
$validator = Validator::create(); $file = $validator->isFileUpload('image'); $stringValidator = $validator->isString('image')->isAlpha(); $file->hasFileNameFormat($stringValidator)->validate('image');
4.6.4. hasValidUploadDirectory($uploadDir) ↑
Example
$file = Validator::create()->isFileUpload('image'); $file->hasValidUploadDirectory('./uploads/images')->validate('image');
4.6.5. notOverwritingExistingFile($uploadDir) ↑
Example
$file = Validator::create()->isFileUpload('image'); $file->notOverwritingExistingFile('./uploads/images')->validate('image');
4.6.6. hasLength($size) ↑
Example
$file = Validator::create()->isFileUpload('image'); $file->hasLength(1)->validate('image');
4.6.7. isImage() ↑
Example
$file = Validator::create()->isFileUpload('image'); $file->isImage()->validate('image');
4. Quality Code ↑
Testing has been done using PHPUnit and Travis-CI. All code has been tested to be compatible from PHP 5.4 up to PHP 5.6 and HHVM.
To run the test suite, you need Composer:
php composer.phar install --dev php bin/phpunit
5. Author ↑
Nil Portugués Calderó
6. License ↑
The Input Validator is licensed under the MIT license.