werx / validation
验证单个数据元素,或将验证规则分组以验证表单。
Requires
- php: >= 5.4
Requires (Dev)
- phpunit/phpunit: ~4.4
- squizlabs/php_codesniffer: ~2.2
README
简单的输入验证。
使用方法
本库包含两个组件。一组验证方法和一个输入验证引擎。
验证器
可以使用 Validator 类快速验证单个输入。
include 'vendor/autoload.php'; use werx\Validation\Validator; $input = 'foo'; $valid = Validator::minlength($input, 4); var_dump($valid); /* bool(true) */
以下验证器可用。每个验证器返回一个布尔值:true
= 通过验证,false
= 未通过验证。
bool required (mixed $input) bool date (mixed $input [, $input_format = MM/DD/YYYY]) # Other input formats available YYYY/MM/DD, YYYY-MM-DD, YYYY/DD/MM, YYYY-DD-MM, DD-MM-YYYY, DD/MM/YYYY, MM-DD-YYYY, MM/DD/YYYY, YYYYMMDD, YYYYDDMM bool minlength(mixed $input, int $min) bool maxlength(mixed $input, int $max) bool exactlength(mixed $input, int $length) bool greaterthan($input, int $min) bool lessthan(mixed $input, int $max) bool alpha(mixed $input) bool alphanumeric(mixed $input) bool integer(mixed $input) bool float(mixed $input) bool numeric(mixed $input) bool email(mixed $input) bool url(mixed $input) bool phone(mixed $input) bool zipcode(mixed $input) bool startswith(mixed $input, string $match) bool endswith(mixed $input, string $match) bool contains(mixed $input, string $match) bool regex(mixed $input, string $regex) bool inlist(mixed $input, array $list)
验证引擎
验证引擎用于验证一组数据与一组规则。
使用方法
首先,获取验证引擎的实例
use werx\Validation\Engine as ValidationEngine; $validator = new ValidationEngine;
然后添加规则
$validator->addRule('firstname', 'First Name', 'required|minlength[2]|alpha');
参数
- 要验证的表单输入名称 / 数组键
- 元素的友好标签
- 用管道分隔的规则列表
- 每个规则对应于 Validator 类中的方法名
- 如果方法接受参数,则参数应在规则名之后用方括号括起来
- 示例:
minlength[2]
- 异常:接受数组作为参数的方法应在规则名之后用大括号括起来。
- 示例:
inlist{red,white,blue}
- 示例:
- 示例:
- 除了
required
验证器外,所有验证器如果输入为空都会返回true
。- 换句话说,
minlength[2]
只有在添加required
规则时才会实际触发。
- 换句话说,
现在您可以获取验证结果。
$valid = $validator->validate($_POST);
验证输入数组
有时您不是使用简单的字符串作为输入字段名称。假设您的 HTML 输入表单如下所示
<input type="text" name="volunteer[name]"> <input type="text" name="volunteer[email]">
在此场景下创建规则时,请将数组名称和键名称用点分隔。
$validator->addRule('volunteer.name', 'Name', 'required|minlength[2]|alpha'); $validator->addRule('volunteer.email', 'Email Address', 'required|email');
闭包
除了 Validator
类中的预定义验证方法外,您还可以使用 闭包 创建自定义验证方法。
$closure = function ($data, $id, $label) { $message = null; $success = $data[$id] == 'Foo'; if (!$success) { $message = sprintf('%s must equal "Foo"', $label); } return [$success, $message]; }; $validator->addRule('firstname', 'First Name', $closure); $valid = $validator->validate($_POST);
闭包将接收三个值
- 正在验证的完整数据集。
- 正在验证的元素的 ID。
- 正在验证的元素的标签。
闭包应返回一个数组。
- 数组的第一个元素应该是验证结果(
bool
)。 - 数组的第二个元素应该是如果验证失败要显示的错误消息。
- 如果验证通过,消息可以为 null。
规则集
如果您想保存一组规则而不是每次验证时都单独添加每个规则,我们已为您做好准备。
创建一个扩展 werx\Validation\Ruleset
的新类,并在构造函数中添加您的规则。
namespace your\namespace\Rulesets; use werx\Validation\Ruleset; class Contact extends Ruleset { public function __construct() { $this->addRule('firstname', 'First Name', 'required|minlength[2]'); $this->addRule('lastname', 'Last Name', 'required'); $this->addRule('phone', 'Phone Number', 'required|phone'); $this->addRule('email', 'Email Address', 'required|email'); } }
然后,当您准备好验证这组规则时
$contact_rules = new your\namespace\Rulesets\Contact; $validator->addRuleset($contact_rules); $valid = $validator->validate();
实用方法
有几个实用方法可以使处理验证结果变得更加容易。
getErrorSummary()
返回一个简单数组,其中包含验证错误消息列表。
if (!$valid) { $summary = $validator->getErrorSummary(); } /* Array ( [0] => First Name must only contain the letters A-Z. [1] => First Name must be at least 2 characters long. [2] => Last Name is a required field. ) */
getErrorSummaryFormatted()
返回格式化为 HTML 无序列表(<ul>
)的错误摘要。
getErrorFields()
返回有错误的字段列表。如果您想为有验证错误的字段在表单上应用一些装饰,这很有用。
if (!$valid) { $error_fields = $validator->getErrorFields(); } /* Array ( [0] => firstname [1] => lastname ) */
getRequiredFields()
添加规则后,您可以获取所需字段的列表。当您想在表单上标记哪些字段必须填写时,这非常有用。
$validator->addRule('firstname', 'First Name', 'required'); $validator->addRule('lastname', 'Last Name', 'required'); $validator->addRule('age', 'Age', 'required|integer'); $required = $validator->getRequiredFields(); /* Array ( [0] => firstname [1] => lastname [2] => age ) */
addCustomMessage()
允许您设置自定义错误信息。
在显示错误信息时,{name}
将被替换为正在验证的字段名称。其余字段将使用sprintf()
进行解析,以便将像minlength
这样的参数放置在返回的错误信息中。
示例
$validator->addCustomMessage('required', "You didn't provide a value for {name}!"); $validator->addCustomMessage('minlength', "Oops, {name} must be at least %d characters long.");
安装
该软件包可以通过Composer以werx/validation的方式安装和自动加载。如果您不熟悉PHP的Composer依赖管理器,您应该先阅读这个。
$ composer require werx/validation --prefer-dist
贡献
单元测试
$ vendor/bin/phpunit
编码标准
此库使用PHP_CodeSniffer来确保遵循编码标准。
我采用了PHP FIG PSR-2编码标准,除了缩进时使用制表符或空格的规则。PSR-2说使用4个空格。我使用制表符。没有讨论。
为了支持使用制表符缩进,我定义了一个自定义的PSR-2规则集,它扩展了由PHP_CodeSniffer使用的标准PSR-2规则集。您可以在该项目的根目录下找到此规则集,文件名为PSR2Tabs.xml。
从该项目的根目录执行codesniffer命令,使用这些自定义规则运行检查器。
$ ./codesniffer