This library seeks to be a simple and reusable validation library for input based on rules.
<?php
$v = \Psecio\Validate\Validator::getInstance();
$data = [
'foo' => 'bar'
];
$rules = [
'foo' => 'required|alpha'
];
$result = $v->execute($rules, $data);
var_export($result);
?>
You can also define custom messages for the failures using the third $messages
parameter on the execute
method. The key names on the array match to the value name + check type. For example:
<?php
$v = \Psecio\Validate\Validator::getInstance();
$data = [
'foo' => 'bar'
];
$rules = [
'foo' => 'required|alpha'
];
$messages = [
'foo' => ['alpha' => 'This is a custom message']
];
$result = $v->execute($rules, $data, $messages);
var_export($result);
In the example above, we define a custom message for the alpha
check on the foo
value. If that check were to fail, the error message output would be the new custom message instead of the default.
There are two method available to get the errors when the result of the execute
method is false
:
- The
errors
method that will return a nested key/value set of failure messages (top level is the value name with each check failure message under it) - The
errorArray
method that will return a flattended set of messages useful for output to a page without requiring too much looping
Here is a listing of the check types that Validation supports:
Checks for only alpha characters
Checks for only alpha-numeric characters
Checks to ensure the value provided is numeric (integer, float, etc)
Checks for integer-only values. Can also include minimum and maximum values:
// Minimum of 1, max of 10
$rules = ['mynumber' => 'integer[1,10]'];
Checks for boolean values (true
, false
, 0
, 1
and strings '0'
, '1'
)
Checks to ensure the value provided is an array
Checks the value to ensure the (string) length matches requirements. You must provide a minimum value, but a maximum can also be defined
// Using just the minimum, checking for a length of at least 3
$rules = ['mystring' => 'length[3]']
// Using both minimum and maximum, check for a length between 3 and 10
$rules = ['mystring' => 'length[3,10]']
Checks to be sure the value given is a date (as parsed by strtotime)
Checks to see if the value (a parseable date) is before the date provided (as parsed by strtotime)
// Check to see if the date provided is before yesterday
$rules = [
'myinputdate' => 'before[yesterday]'
];
Checks to see if the value (a parseable date) is after the date provided (as parsed by strtotime)
// Check to see if the date is in the last three days
$rules = [
'myinputdate' => 'after[-3 days]'
];
Checks to ensure the value provided is in a set of values
// Check to see if the value is one of "foo", "bar" or "baz"
$rules = [
'myvalue' => 'in[foo,bar,baz]'
]
Checks to be sure the value is a valid JSON formatted string (using json_decode)
Checks to be sure the value exists
Checks to ensure the value provided is a valid IPv4 or IPv6 formatted address
Check to ensure the value provided is a validly formatted email address
Check to ensure the value matches a certain regular expression at least once
$rules = [
'mystring' => 'regex[/[0-9a-z]+/]'
]
This check can be used to see if the values of two fields match exactly.
$data = [
'foo' => 'test1',
'bar' => 'test1'
];
$rules = [
'bar' => 'equals[foo]'
];
This check can be used to call custom logic via a static class method. For example, if your class is:
<?php
class Foo {
public static function check($input) { ... }
}
?>
Then your rule would look something like this:
$rules = [
'mystring' => 'callback[Foo::check]'
];
And the check
method should return a boolean result.