crysalead/validator

验证库

3.0.5 2020-06-06 13:33 UTC

This package is auto-updated.

Last update: 2024-09-18 00:23:17 UTC


README

Build Status Code Coverage

Validator 是一个灵活且直接的独立验证库。

简单验证用法

$v = new Validator();

$v->rule('title', [
    'not:empty',
    'lengthBetween' => ['min' => 3, 'max' => 20]
]);

$v->validate(['title' => 'new title']); // boolean
$v->errors(); // errors ?

每个验证规则由一个数组定义,其中第一个值是验证处理器的名称。任何名称都可以以 'not:' 为前缀来匹配其相反的要求。后续键定义了额外的选项,以下是一些所有验证处理器共有的选项

  • message: 如果此规则失败,则显示的错误消息。
  • required (布尔值): 指定必须提交此字段的值才能进行验证。默认为 true
  • skipEmpty (布尔值): 如果值为空或为空,则跳过此规则。默认为 false
  • check: 要使用的特定验证处理器的名称,或 'any' 以检查它们直到通过一个。

多维数组验证

要验证数组,可以使用以下点表示法

$v = new Validator();
$v->rule('emails.*', 'email');

$v->validate(['emails' => [
    'willy@boy.com', 'johnny@boy.com']
]);

还可以使用相同的点表示法验证深度嵌套的数据结构

$v = new Validator();
$v->rule('people.*.email', 'email');

$v->validate([
    'people' => [
        ['email' => 'willy@boy.com'],
        ['email' => 'johnny@boy.com']
    ]
]);

内置验证处理器

  • accepted - 必须被接受,
  • alphaNumeric - 必须只包含字母 a-z 和/或数字 0-9,
  • boolean - 必须是布尔值,
  • creditCard - 必须是有效的信用卡号码,
  • date - 不是一个有效日期,
  • dateAfter - 必须在 {:date} 之后,
  • dateBefore - 必须在 {:date} 之前,
  • dateFormat - 必须是格式为 {:format} 的日期,
  • decimal - 必须是十进制数,
  • email - 不是一个有效的电子邮件地址,
  • equalTo - 必须等于字段的 {:key}
  • empty - 必须为空,
  • inList - 必须包含有效值,
  • inRange - 必须在范围内,
  • integer - 必须是整数,
  • ip - 必须是 IP 地址,
  • length - 必须长于 {:length},
  • lengthBetween - 必须在 {:min} 和 {:max} 个字符之间,
  • lengthMax - 必须包含少于 {:length} 个字符,
  • lengthMin - 必须包含多于 {:length} 个字符,
  • luhn - 必须是有效的信用卡号码,
  • max - 必须不多于 {:max},
  • min - 必须至少为 {:min},
  • money - 必须是有效的货币金额,
  • numeric - 必须是数字,
  • phone - 必须是电话号码,
  • regex - 包含无效字符,
  • required - 必须填写,
  • time - 必须是有效的时间,
  • url - 不是一个 URL

所有验证都可以使用 'not:' 前缀,例如 'not:empty' 如果值为空将失败。

注意:只有 'not:empty''not:inList''not:inRange' 定义了默认错误消息,因此如果您打算在另一个验证处理器上使用 not: 前缀,不要忘记使用 ->messages() 来设置它。

添加自定义验证规则

虽然验证器提供了一些有用的规则,但您不可避免地想要创建自己的验证规则。这可以通过调用 set() 来指定新规则逻辑来完成(在运行时)。

规则添加的最简单形式是通过正则表达式

$v = new Validator();
$v->set('zeroToNine', '/^[0-9]$/');

通常,验证规则有多种“格式”,例如信用卡,它们因卡类型而异。定义多种格式可以保留您验证数据的方式的灵活性。

$v = new Validator();
$v->set('postalCode', [
    'us' => '/^\d{5}(?:[-\s]\d{4})?$/',
    'fr' => '/^(F-)?((2[A|B])|[0-9]{2})[0-9]{3}$/',
    'uk' => '/^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$/'
]);

$v->message('postalCode', 'invalid postal code');

$v->rule('zip', 'postalCode');

$v->validate(['zip' => '30700'], ['check' => 'fr']);  // check only the fr validation handler.
$v->validate(['zip' => '30700'], ['check' => 'any']); // default behavior.

如果您需要比模式识别更多,您还可以提供匿名函数作为规则

$v = new Validator();
$v->set('zeroToNine', function($value, $options = [], &$params = []) {
    return preg_match('/^[0-9]$/', $value);
});

设置默认验证消息

您可以为每个验证处理器设置默认消息,而不是为每个规则设置 'message',使用 ::messages() 如以下示例所示

$v = new Validator();
$v->set('zeroToNine', '/^[0-9]$/');

Validator::messages([
    'zeroToNine' => 'must be between 0 to 9'
]);

$v->rule('checksum', 'zeroToNine');
$v->validate(['checksum' => '25']);
$v->errors(); // returns ['zeroToNine' => ['must be between 0 to 9']]

添加全局验证规则

Validator 类基于 Checker 类进行验证。要添加一个可供所有 Validator 实例使用的全局验证处理程序,您需要将其添加到 Checker 类中。

Checker::set('zeroToNine', '/^[0-9]$/');
Checker::message('zeroToNine', 'must be between 0 to 9');

$v = new Validator();
$v->rule('checksum', 'zeroToNine');
$v->validate(['checksum' => '25']);
$v->errors(); // returns ['zeroToNine' => ['must be between 0 to 9']]

自定义错误信息

有时在错误信息中显示一些自定义数据很有趣。例如,某些边界或特定的标签名称。为了使其生效,所有参数都需要添加到验证规则中,如下所示

$v = new Validator();

$v->rule('title', [
    'not:empty' => [
        'message' => 'please enter a {:label}',
        'label' => 'title'
    ],
    'lengthBetween' => [
        'min' => 3,
        'max' => 20,
        'message' => 'must be between {:min} and {:max} character long'
    ]
]);

全球化

由于有许多不同的方法来解决全球化问题,因此没有对如何执行做出任何假设。相反,您可以定义自己的错误信息处理程序以适应您的全球化架构。

$v = new Validator([
    'error' => function($name, $options, $meta = []) {
        $message = __t($options['message'] ?: $name); // <- put here your logic to perform translations
        return Text::insert($message, $options);
    }
]);

需求

需要 PHP >= 5.5。

使用 Composer 安装

推荐通过 Composer 安装此软件包。创建一个 composer.json 文件并运行 composer install 命令来安装

{
	"require":
	{
		"crysalead/validator": "~1.0"
	}
}

测试

可以使用以下命令运行规范套件

cd validator
composer install
./bin/kahlan

PS: 您的系统上需要存在 Composer