Respect/Validation PHP 验证库:完整指南与实战示例
Respect/Validation 是一个强大且优雅的 PHP 数据验证库。与 PHP 内置函数(如 filter_var 或正则表达式)不同,Respect/Validation 提供了面向对象、链式调用的流畅接口,用于构建复杂的验证规则。该库让你能够编写可读性强、自文档化的验证代码,易于维护和扩展。
为什么需要这个库?在任何 Web 应用中,都需要验证用户输入:Email、密码、URL、IP 地址、日期、数字范围等等。没有验证系统,代码很快就会变成一堆 if-else 和正则表达式的混乱组合。Respect/Validation 通过提供超过 100 个现成的验证规则,并支持组合成复杂的验证链,完美解决了这个问题。该库还支持多语言自定义错误消息,使其成为国际化项目的理想选择。
核心特性是验证链。你可以将多个规则组合成一个链,它们会按顺序依次执行。如果任何一个规则不通过,验证会停止(默认行为)并返回错误。这让你能够编写简洁而富有表现力的代码。
安装
通过 Composer(PHP 的标准包管理器)进行安装。在项目根目录的终端中执行:
composer require respect/validation
安装完成后,在你的 PHP 文件中引入 Composer 的自动加载器:
require_once 'vendor/autoload.php';
快速上手
一个验证 Email 和密码的最小工作示例:
use Respect\Validation\Validator as v;
$email = 'user@example.com';
$password = 'StrongP@ss1';
// 创建验证链
$validator = v::email()->length(6, 100)->notEmpty();
if ($validator->validate($email)) {
echo "Email 有效!";
} else {
// 获取错误数组
$errors = $validator->getMessages();
print_r($errors);
}
// 密码验证
$passwordValidator = v::alnum()->noWhitespace()->length(8, 32);
if ($passwordValidator->validate($password)) {
echo "密码有效!";
}
在这个例子中,v::email() 检查 Email 格式,length(6, 100) 检查字符串长度,notEmpty() 确保值不为空。所有规则都链式组合在一起。
核心方法与类
下面介绍该库的 8 个关键方法(规则)。每个规则都是 Respect\Validation\Validator 类的一个静态方法(通常导入为 v)。
1. v::email()
签名: public static function email(): Validator
功能: 检查值是否为符合 RFC 5321/5322 标准的有效 Email 地址。
示例:
$validator = v::email();
var_dump($validator->validate('test@test.com')); // true
var_dump($validator->validate('not-an-email')); // false
2. v::alnum()
签名: public static function alnum(string $additionalChars = ''): Validator
功能: 检查字符串是否仅包含字母(a-z, A-Z)和数字(0-9)。可以传入额外允许的字符。
示例:
$validator = v::alnum();
var_dump($validator->validate('abc123')); // true
var_dump($validator->validate('hello world')); // false(空格不允许)
// 带额外字符
$validatorWithDash = v::alnum('-');
var_dump($validatorWithDash->validate('my-name')); // true