grahamsutton/validator

此包的最新版本(v1.2)没有可用的许可信息。

一个简单的PHP验证库。

v1.2 2018-07-10 01:57 UTC

This package is not auto-updated.

Last update: 2024-09-26 00:44:49 UTC


README

验证器是一个简单的PHP验证库,旨在消除创建(通常是)丑陋的验证逻辑的麻烦,并从Laravel的内部验证库中汲取了大量灵感。

此库旨在轻量级(无依赖!)且易于使用。

Build Status

要求

  • PHP 7.1及更高版本

要安装,请在项目的根目录中运行以下命令

$ composer require grahamsutton/validator

可用规则

两种使用方式

有两种方式可以执行验证

链式方法

如果您想执行验证,可以链式调用验证方法...

use Validator\Validator;

$is_valid = (new Validator())
    ->required('name', 'Graham')
    ->numeric('age', 33)
    ->email('email', 'grahamsutton2@gmail.com')
    ->int('total', 123)
    ->float('amount', 123.45)
    ->boolean('likes_dinos', true)
    ->min('fav_color', 'green', 3)
    ->max('state', 'FL', 2)
    ->date('birthday', '1980-01-01')
    ->array('fav_nums', [7, 4, 92])
    ->accepted('terms', true)
    ->afterDate('start_date', '2018-05-24', '2018-01-31')
    ->beforeDate('end_date', '2024-05-24', '2218-01-31')
    ->validate();

-or-

管道格式(推荐)

如果您想在字段上执行多个验证,可以使用与Laravel相同的管道格式。这是执行验证的首选方法,大多数情况下看起来更好。

use Validator\Validator;

$validator = new Validator([
    'name'        => 'required|min:3|max:15',
    'age'         => 'required|numeric',
    'email'       => 'required|email',
    'total'       => 'required|int',
    'amount'      => 'required|float'
    'likes_dinos' => 'required|boolean',
    'date'        => 'required|date',
    'fav_nums'    => 'required|array',
    'terms'       => 'accepted',
    'start_date'  => 'required|afterDate:2018-01-31',
    'end_date'    => 'required|beforeDate:2218-01-31',
]);

$is_valid = $validator->validate([
    'name'        => 'someone',
    'age'         => 23,
    'email'       => 'someone@example.com',
    'total'       => 123,
    'amount'      => 123.45,
    'likes_dinos' => true,
    'date'        => '2018-02-18 23:00:00',
    'fav_nums'    => [7, 4, 92],
    'terms'       => true,
    'start_date'  => '2018-05-24',
    'end_date'    => '2024-05-24',
]));

获取错误

获取错误很简单。当验证失败时,它将记录到一个数组中,可以从两个不同的方法中检索:`getErrors`或`getAllErrors`。

getErrors: array

这将返回一个平展的关联数组,其中键是失败的字段名,值是检测到的第一个错误。

注意:请注意,某些值可能失败多个验证,例如`name`,但每个字段只有一个错误信息。

use Validator\Validator;

$validator = new Validator([
    'name'        => 'required|min:3|max:15',
    'age'         => 'required|numeric',
    'email'       => 'required|email',
    'total'       => 'required|int',
    'amount'      => 'required|float'
    'likes_dinos' => 'required|boolean',
    'date'        => 'required|date',
    'fav_nums'    => 'required|array',
    'terms'       => 'accepted',
    'start_date'  => 'required|afterDate:2018-01-31',
    'end_date'    => 'required|beforeDate:2218-01-31',
]);

// $is_valid will be false
$is_valid = $validator->validate([
    'name'        => '',                     // invalid
    'age'         => 'string',               // invalid
    'email'       => '@example.com',         // invalid
    'total'       => 123.45,                 // invalid
    'amount'      => 123,                    // invalid
    'likes_dinos' => 12,                     // invalid
    'date'        => 'incorrect'             // invalid
    'fav_nums'    => 'should be an array',   // invalid  
    'terms'       => false,                  // invalid
    'start_date'  => '2017-05-24',           // invalid
    'end_date'    => '2324-05-24',           // invalid
]));

$validator->getErrors();

// Returns:
// [
//     'name'        => 'The name field is required.',
//     'age'         => 'The age field must be a numeric value.',
//     'email'       => 'The email field must be a valid email.',
//     'total'       => 'The total field must be an integer.',
//     'amount'      => 'The amount field must be a float.',
//     'likes_dinos' => 'The likes_dinos field must be a boolean value.',
//     'date'        => 'The date field is not a valid date.',
//     'fav_nums'    => 'The fav_nums field must be an array.',
//     'terms'       => 'The terms field must be accepted.',
//     'start_date'  => 'The start_date field value must be after 2018-01-31 00:01:00 (yyyy-mm-dd hh:mm:ss).',
//     'end_date'    => 'The end_date field value must be before 2218-01-31 00:01:00 (yyyy-mm-dd hh:mm:ss).',
// ]

getAllErrors: array

如果您想获取所有字段记录的所有错误信息,只需使用`getAllErrors`方法。这将返回失败的字段名作为键,每个失败字段的错误信息数组作为值。

use Validator\Validator;

$validator = new Validator([
    'name'       => 'required|min:3|max:15',
    'age'        => 'required|numeric',
    'email'      => 'required|email',
    'accepted'   => 'required|boolean',
    'date'       => 'required|date'
]);

// $is_valid will be false
$is_valid = $validator->validate([
    'name'       => '',              // invalid
    'age'        => 'string',        // invalid
    'email'      => '@example.com',  // invalid
    'accepted'   => 12,              // invalid
    'date'       => 'incorrect'      // invalid
]));

$validator->getAllErrors();

// Returns:
// [
//     'name' => [
//         'The name field is required.',
//         'The name field must be greater than or equal to 3 characters.'
//     ],
//     'age'      => ['The age field must be a numeric value.'],
//     'email'    => ['The email field must be a valid email.'],
//     'accepted' => ['The accepted field must be a boolean value.'],
//     'date'     => ['The date field is not a valid date.']
// ]

可用规则

required

验证值不为空且字段存在。

use Validator\Validator;

$is_valid = (new Validator)
    ->required('field_name', 'value')
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'required'
]);

$is_valid = $validator->validate([
    'field_name' => 'value'
]);

默认错误信息:`{field_name} 字段是必填的`。

max:int

确定字段可以具有的最大值或字符串长度。

如果提供的值是整数,验证将比较提供的整数是否小于或等于指定的整数。

如果提供的值是字符串,验证将比较值的字符串长度(由PHP的`strlen`函数确定)是否小于或等于指定的整数。

use Validator\Validator;

$is_valid = (new Validator)
    ->max('field_name', 'value', $max = 8)
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'max:8'
]);

$is_valid = $validator->validate([
    'field_name' => 'value'
]);

默认错误信息:`{field_name} 字段必须小于或等于 {int} 个字符`。

min:int

确定字段可以具有的最小值或字符串长度。

如果提供的值是整数,验证将比较提供的整数是否大于或等于指定的 int 值。

如果提供的值是字符串,验证将比较该值(由 PHP 的 strlen 函数确定)的字符串长度是否大于或等于指定的 int 值。

use Validator\Validator;

$is_valid = (new Validator)
    ->min('field_name', 'value', $min = 3)
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'min:3'
]);

$is_valid = $validator->validate([
    'field_name' => 'value'
]);

默认错误信息:{field_name} 字段必须大于或等于 {int} 个字符。

int

基于 PHP 的 is_int 函数确定一个值是否为整数。

use Validator\Validator;

$is_valid = (new Validator)
    ->int('field_name', $value = 123)
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'int'
]);

$is_valid = $validator->validate([
    'field_name' => 123
]);

默认错误信息:{field_name} 字段必须是一个整数。

float

基于 PHP 的 is_float 函数确定一个值是否为浮点数。

use Validator\Validator;

$is_valid = (new Validator)
    ->float('field_name', $value = 123.45)
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'float'
]);

$is_valid = $validator->validate([
    'field_name' => 123.45
]);

默认错误信息:{field_name} 字段必须是一个浮点数。

numeric

基于 PHP 的 is_numeric 函数确定一个值是否为数字。该值可以是字符串,只要它可以被转换为数值。

use Validator\Validator;

$is_valid = (new Validator)
    ->numeric('field_name', $value = 23)
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'numeric'
]);

$is_valid = $validator->validate([
    'field_name' => 23
]);

默认错误信息:{field_name} 字段必须是一个数值。

email

确定一个值是否是一个有效的电子邮件地址。

use Validator\Validator;

$is_valid = (new Validator)
    ->email('field_name', 'value@example.com')
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'email'
]);

$is_valid = $validator->validate([
    'field_name' => 'value@example.com'
]);

默认错误信息:{field_name} 字段必须是一个有效的电子邮件。

boolean

确定一个值是 truefalse01"0""1"

use Validator\Validator;

$is_valid = (new Validator)
    ->boolean('field_name', $value = true)
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'boolean'
]);

$is_valid = $validator->validate([
    'field_name' => true
]);

默认错误信息:{field_name} 字段必须是一个布尔值。

accepted

确定一个值是 true1"1""yes"。这对于确保人们接受你的网站上的条款和条件很有用。如果提供一个错误的值,此验证将失败。

当提供时,"yes" 将被解析为小写,以防你大写提供。

use Validator\Validator;

$is_valid = (new Validator)
    ->accepted('field_name', $value = true)
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'accepted'
]);

$is_valid = $validator->validate([
    'field_name' => true
]);

默认错误信息:{field_name} 字段必须被接受。

array

确定一个值是一个数组。内部使用 PHP 的 is_array 函数来确定其真实性。空数组被视为有效。添加 required 验证以禁止空数组。

use Validator\Validator;

$is_valid = (new Validator)
    ->array('field_name', $value = ['value1', 'value2'])
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'array'
]);

$is_valid = $validator->validate([
    'field_name' => ['value1', 'value2']
]);

默认错误信息:{field_name} 字段必须是一个数组。

date

确定一个值可以被 PHP 的 strtotime 函数解析。

use Validator\Validator;

$is_valid = (new Validator)
    ->date('field_name', $value = '2018-07-24 03:30:24')
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'date'
]);

$is_valid = $validator->validate([
    'field_name' => '2018-07-24 03:30:24'
]);

默认错误信息:{field_name} 字段不是一个有效的日期。

afterDate:字符串

确定一个值是否在指定日期之后。该字符串参数可以是PHP的strtotime函数可以解析的任何值。

use Validator\Validator;

$is_valid = (new Validator)
    ->afterDate('field_name', $value = '2018-07-25 03:30:24', $after_date = '2018-07-24 00:00:00')
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'afterDate:2018-07-24 00:00:00'
]);

$is_valid = $validator->validate([
    'field_name' => '2018-07-25 03:30:24'
]);

默认错误信息:{字段名}字段值必须在{after_date}(yyyy-mm-dd hh:mm:ss)之后。

beforeDate:字符串

确定一个值是否在指定日期之前。该字符串参数可以是PHP的strtotime函数可以解析的任何值。

use Validator\Validator;

$is_valid = (new Validator)
    ->beforeDate('field_name', $value = '2018-07-24 03:30:24', $before_date = '2018-07-25 00:00:00')
    ->validate();

use Validator\Validator;

$validator = new Validator([
    'field_name' => 'beforeDate:2018-07-25 00:00:00'
]);

$is_valid = $validator->validate([
    'field_name' => '2018-07-24 03:30:24'
]);

默认错误信息:{字段名}字段值必须在{before_date}(yyyy-mm-dd hh:mm:ss)之前。

许可协议

Validator遵循MIT许可协议 - 详细内容请参阅LICENSE文件。