igniphp / validation
Requires
- php: ^7.1.0
Requires (Dev)
- mockery/mockery: ^0.9.4
- phpunit/phpunit: ~5.7
Suggests
- bcmath: For long numbers validation
This package is not auto-updated.
Last update: 2024-09-23 15:00:04 UTC
README
Igni 验证
MIT 许可证下发布。
Igni 验证库简单、轻量且可扩展。
安装
composer install igniphp/validation
简介
基本示例
<?php use Igni\Validation\Assertion; $numberValidator = Assertion::number($min = 0); $numberValidator->validate(1);// true $numberValidator->validate(-1);// false $numberValidator->validate(1.0);// true $numberValidator->validate('a'); // false
获取错误信息
允许验证复杂数组
<?php use Igni\Validation\Assertion; use Igni\Validation\Error; $userValidator = Assertion::group([ 'name' => Assertion::alnum(), 'age' => Assertion::number(1, 200), 'email' => Assertion::email(), 'address' => Assertion::text(), ]); $userValidator->validate([ 'name' => 'John', 'age' => 233, 'email' => 'johnmail', ]);// false $errors = $userValidator->getErrors(); $errors[0] instanceof Error\OutOfRangeError;// true $errors[0]->getContext()->getName();//age $errors[1] instanceof Error\EmptyValueError;// true $errors[1]->getContext()->getName();//address // Exception can also be factored out of failure instance throw $errors[0]->toException();
API
验证列表
- alnum
- alpha
- boolean
- chain
- contains
- date
- each
- falsy
- group
- in
- integer
- ip
- ipv4
- ipv6
- number
- regex
- text
- truthy
- uri
- url
- uuid
Assertion::alnum(int $min = null, int $max = null)
创建一个验证器,检查传递的值是否只包含数字和字母。
参数
$min
定义最小长度$max
定义最大长度
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::alnum($minLength = 2); var_dump($validator->validate('a1')); // true
Assertion::alpha(int $min = null, int $max = null)
创建一个验证器,检查传递的值是否只包含字母。
参数
$min
定义最小长度$max
定义最大长度
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::alpha($minLength = 2); var_dump($validator->validate('aaa')); // true
Assertion::boolean()
创建一个验证器,检查传递的值是否是有效的布尔表达式。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::boolean(); var_dump($validator->validate(false)); // true
Assertion::chain(Rule ...$rules)
创建一个验证器,使用其他验证器对传递的值执行多次验证。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::chain(Assertion::text(), Assertion::date()); var_dump($validator->validate('2018-09-10')); // true
Assertion::contains(string $value)
创建一个验证器,检查传递的字符串是否包含在验证的字符串中。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::contains('example'); var_dump($validator->validate('Test example')); // true
Assertion::date(string $format = null, $min = null, $max = null)
创建一个验证器,检查传递的值是否是有效的日期。
参数
$format
限制传递值的格式$min
定义最小日期范围$max
定义最大日期范围
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::date('Y-m-d'); var_dump($validator->validate('2018-09-10')); // true
Assertion::email()
创建一个验证器,检查传递的值是否是有效的电子邮件地址。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::email(); var_dump($validator->validate('test@test.com')); // true
Assertion::each(Validator $validator)
创建一个验证器,检查传递集合中的每个项是否可以成功通过 $validator
验证。
参数
$validator
验证器用于传递集合中的每个项。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::each(Assertion::date('Y-m-d')); var_dump($validator->validate(['2019-01-01', '2018-10-11'])); // true
Assertion::falsy()
创建一个验证器,检查传递的值是否是有效的 falsy 表达式;
off
no
false
- 0
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::falsy(); var_dump($validator->validate('no')); // true
Assertion::group(array $validatorsHash)
创建一个具有键/值散列的验证器,用于验证其他散列。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::group([ 'email' => Assertion::email(), 'password' => Assertion::text(), 'date_of_birth' => Assertion::date('Y-m-d'), ]); var_dump($validator->validate([ 'email' => 'test@domain.com', 'password' => 'secret', 'date_of_birth' => '2019-01-01', ])); // true
Assertion::regex(string $pattern)
创建一个验证器,检查传递的字符串是否与模式匹配。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::regex('^-[a-z]+$'); var_dump($validator->validate('-aa')); // true
Assertion::truthy()
创建一个验证器,检查传递的值是否是有效的 truthy 表达式;
on
true
- 1
yes
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::truthy(); var_dump($validator->validate('yes')); // true
Assertion::text(int $minLength = null, int $maxLength = null)
创建一个验证器,检查传递的值是否是字符串。
参数
$minLength
定义最小长度$maxLength
定义最大长度
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::text($minLength = 2); var_dump($validator->validate('aaa')); // true
Assertion::in(...$values)
创建一个验证器,检查传递的值是否存在于定义的值列表中。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::in('no', 'yes', 'test'); var_dump($validator->validate('no')); // true
Assertion::integer(int $min = null, int $max = null)
创建一个验证器,检查传递的值是否是有效的整数表达式。
参数
$min
定义最小值$max
定义最大值
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::integer(10, 100); var_dump($validator->validate(11)); // true
Assertion::ip()
创建一个验证器,检查传递的值是否是有效的 IP 地址。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::ip(); var_dump($validator->validate('123.123.123.123')); // true
Assertion::ipv4()
创建一个验证器,检查传递的值是否是有效的 IPv4 地址。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::ipv4(); var_dump($validator->validate('123.123.123.123')); // true
Assertion::ipv6()
创建一个验证器,检查传递的值是否是有效的 IPv6 地址。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::ipv6(); var_dump($validator->validate('2001:0db8:85a3:0000:0000:8a2e:0370:7334')); // true
Assertion::number(int $min = null, int $max = null)
创建验证器,用于检查传入的值是否为有效的数字表达式。
参数
$min
定义最小值$max
定义最大值
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::number(10, 100); var_dump($validator->validate('11.2')); // true
Assertion::uuid()
创建验证器,用于检查传入的值是否为有效的UUID。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::uuid(); var_dump($validator->validate('1ff60619-81cc-4d8e-88ac-a3ae36a97dce')); // true
Assertion::uri()
创建验证器,用于检查传入的值是否为有效的URI字符串。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::uri(); var_dump($validator->validate('/some/uri')); // true
Assertion::url()
创建验证器,用于检查传入的值是否为有效的URL字符串。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::uri(); var_dump($validator->validate('http://domain.com/some/uri')); // true
Assertion::text()
创建验证器,接受任何非空字符串。
Assertion::group(array $validators)
创建验证器,通过一组定义的验证器验证传入的值。
示例
<?php use Igni\Validation\Assertion; $validator = Assertion::group([ 'name' => Assertion::text(), 'age' => Assertion::integer(1, 200), 'email' => Assertion::email(), ]); var_dump($validator->validate(['name' => 'John Doe', 'age' => 29, 'email' => 'john@gmail.com'])); // true
创建自定义验证器
要创建自定义验证器,我们只需扩展 \Igni\Validation\Assertion
类,以下是一个示例
<?php declare(strict_types=1); use Igni\Validation\Assertion; class ValidateIn extends Assertion { public function __construct(...$values) { $this->attributes['valid_values'] = $values; } protected function assert($input): bool { return in_array($input, $this->attributes['valid_values'], $strict = true); } }
这就全部了!