An easy and powerful string-based validation library.
This is Pupil.php, the PHP version of the library.
Other available versions:
- Nested validation rules
- String-based validation rules for compatibility between different languages
- Light revalidation via caching
"mivir/pupil": "1.*" to the "require" section of composer.json.
Download the repository. Point a PSR-0 autoloader at the src folder or require the files manually.
The basic syntax is this:
$pupil = new \Mivir\Pupil\Pupil(); $pupil->validate($rules, $values);
$values are arrays with matching keys. The rules are specified as
rule strings; more information on those below.
$rules = array( 'name' => 'min(3) && max(8) && regex("^[a-zA-Z]+$")', 'country' => 'min(2)' ); $values = array( 'name' => $nameInput, 'country' => $countryInput );
The two arrays don't have to have identical keys, but values without a matching key in rules won't be evaluated at all.
validate() method returns an object that has the following methods:
isValid() // Whether the validation was successful or not hasErrors() // The opposite of isValid() errors() // Returns the fields that didn't pass validation fields() // Returns all of the fields and their validation results
Rule strings are Pupil's primary method of specifying validation rules.
The syntax aims to mimic C-like languages. You can use logical operators (
condition ? thenRule : elseRule), nested "blocks" (
rule && (some || nested || rules)) and validation
String parameters for validation functions, such as the regex in the "regex" function, should be quoted.
Non-quoted parameters will be cast to floats (numbers with decimals).
For each validation function, there is also a matching function prepended by
other that allows you to run functions
on other values than the one the rule string is for. This can be useful for fields that have differing requirements depending on another field. For example:
array( 'state' => 'otherEquals("country", "US") ? lenMin(2) : lenMin(0)' )
Validation function arguments can be either strings or numerical values. Numerical arguments should not be wrapped in quotation marks or apostrophes:
The following functions are available by default:
equals iEquals # A case-insensitive comparison sEquals # A strict comparison siEquals lenMin lenMax lenEquals min max between in # Compare to a list of values required optional numeric alpha alphaNumeric email regex # Supply a custom regex integer equalsTo # Compare to another field by its key
You can use the following syntax to add your own validation functions:
Where callable is either an anonymous function or one created with create_function and should, at the very least, accept two arguments:
$allValues is an object containing every value that's being validated at the moment while
$value contains the value we're validating at the moment. Further arguments can be passed in rule strings like so:
The function names are case-insensitive.