crysalead / validator
验证库
Requires
- php: >=5.5
- crysalead/set: ~2.0
- crysalead/text: ~2.0
Requires (Dev)
- kahlan/kahlan: ~4.7
README
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。