igniphp/validation

2.1.1 2019-02-17 09:49 UTC

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

验证列表

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);
    }
}

这就全部了!