PHP Respect Validation
最后修改于 2025 年 2 月 16 日
PHP Respect Validation 教程展示了如何使用 Respect Validation 包来验证 PHP 值。
Respect Validation
Respect Validation 是一个 PHP 独立验证库。
安装
$ composer require respect/validation $ composer require tightenco/collect
我们安装 Respect Validation 包和 Laravel 的集合包。
Respect Validation 简单示例
在第一个例子中,我们展示了如何进行一个非常简单的验证。
<?php
require('vendor/autoload.php');
use Respect\Validation\Validator as v;
$name = "John Doe";
$r = v::alnum()->validate($name);
if ($r) {
echo "Validation passed";
} else {
echo "Validation failed";
}
该示例验证一个值。
use Respect\Validation\Validator as v;
我们包含验证器。
$r = v::alnum()->validate($name);
alnum 是一个验证规则,允许字母数字值。它也允许空格。validate 方法验证规则并返回一个布尔值,指示失败或成功。
if ($r) {
echo "Validation passed";
} else {
echo "Validation failed";
}
根据返回的值,我们显示验证消息。
$ php simple.php Validation passed
添加一个字符
我们可以向规则添加一个字符。
<?php
require('vendor/autoload.php');
use Respect\Validation\Validator as v;
$name = "Vane-Tempest-Stewart";
$r = v::alnum('-')->validate($name);
if ($r) {
echo "Validation passed";
} else {
echo "Validation failed";
}
在示例中,我们向 alnum 规则添加一个破折号。
$name = "Vane-Tempest-Stewart";
一些名称可能包含破折号字符。
$r = v::alnum('-')->validate($name);
我们向 alnum 规则添加一个破折号字符。
Respect Validation 链式规则
规则可以链式组合。
<?php
require('vendor/autoload.php');
use Respect\Validation\Validator as v;
$name = "John";
$r = v::alnum()->length(4, null)->validate($name);
if ($r) {
echo "Validation passed";
} else {
echo "Validation failed";
}
在示例中,我们有两个规则:alnum 和 length。
$r = v::alnum()->length(4, null)->validate($name);
名称必须仅包含字母数字字符,并且必须至少有四个字符。
Respect Validation 组合规则
规则的组合类似于链式技术。使用 Rules\AllOf 来组合多个规则。
<?php
require('vendor/autoload.php');
use Respect\Validation\Validator as v;
use Respect\Validation\Rules;
$name = "John";
$nameValidator = new Rules\AllOf(
new Rules\Alnum(),
new Rules\Length(5, 40)
);
$r = $nameValidator->validate($name);
if ($r) {
echo "Validation passed";
} else {
echo "Validation failed";
}
该示例使用 Rules\AllOf 组合了两个验证规则。
Respect validation assert 函数
validate 方法返回一个布尔值。assert 方法返回一个完整的验证报告。
<?php
require('vendor/autoload.php');
use Respect\Validation\Validator as v;
use Respect\Validation\Exceptions\NestedValidationException;
$name = "";
$validator = v::alnum()->notempty();
try {
$validator->assert($name);
} catch(NestedValidationException $ex) {
$coll = collect($ex->getMessages());
$messages = $coll->flatten();
foreach ($messages as $message) {
echo $message . "\n";
}
}
该示例对验证规则使用 assert 方法,并显示错误消息。
$validator->assert($name);
我们使用 assert 验证一个 name 值。
$coll = collect($ex->getMessages());
$messages = $coll->flatten();
foreach ($messages as $message) {
echo $message . "\n";
}
借助 Laravel 的集合,我们显示错误消息。
$ php assert_fun.php "" must contain only letters (a-z) and digits (0-9) "" must not be empty
Respect Validation between 规则
between 规则验证范围,包括整数、字符和日期。
<?php
require('vendor/autoload.php');
use Respect\Validation\Validator as v;
$age = 34;
$r = v::intVal()->between(18, 99)->validate($age);
if ($r) {
echo "Age validation passed\n";
} else {
echo "Age validation failed\n";
}
$char = 'g';
$r = v::stringType()->between('a', 'c')->validate($char);
if ($r) {
echo "Letter validation passed\n";
} else {
echo "Letter validation failed\n";
}
$myDate = '2013-01-01';
$r = v::date()->between('2009-01-01', '2019-01-01')->validate($myDate);
if ($r) {
echo "Date validation passed\n";
} else {
echo "Date validation failed\n";
}
该示例使用 between 规则。
$r = v::intVal()->between(18, 99)->validate($age);
此规则检查 $age 变量是否在 18 到 99 之间。
$r = v::stringType()->between('a', 'c')->validate($char);
此规则检查 $char 变量是否在 'a' 和 'c' 字符之间。
$r = v::date()->between('2009-01-01', '2019-01-01')->validate($myDate);
此规则检查 $myDate 变量是否在两个指定的日期之间。
Respect Validation 对象
对象属性使用 attribute 进行验证。
<?php
class User {
private $name;
private $email;
public function getName() : string {
return $this->name;
}
public function setName($name) : void {
$this->name = $name;
}
public function getEmail() : string {
return $this->email;
}
public function setEmail($email) : void {
$this->email = $email;
}
}
这是 user.php。
<?php
require('vendor/autoload.php');
require_once('user.php');
use Respect\Validation\Validator as v;
use Respect\Validation\Exceptions\NestedValidationException;
$user = new User();
$user->setName('Jo');
$user->setEmail('johndoe#gmail.com');
$userValidator = v::attribute('name', v::alnum()->length(4, null))
->attribute('email', v::email());
try {
$userValidator->assert($user);
} catch(NestedValidationException $ex) {
$coll = collect($ex->getMessages());
$messages = $coll->flatten();
foreach ($messages as $message) {
echo $message . "\n";
}
}
该示例验证 User 类的属性。
$userValidator = v::attribute('name', v::alnum()->length(4, null))
->attribute('email', v::email());
这些是用户对象属性的规则。
$ php validate_object.php name must have a length greater than 4 email must be valid email
自定义消息
我们可以提供自定义验证消息。
<?php
require('vendor/autoload.php');
use Respect\Validation\Validator as v;
use Respect\Validation\Exceptions\NestedValidationException;
$name = "";
$validator = v::alnum()->notEmpty()->setName('name');
try {
$validator->assert($name);
} catch(NestedValidationException $ex) {
$errors = $ex->findMessages([
'alnum' => '{{name}} must contain only letters and digits',
'notEmpty' => '{{name}} must not be empty'
]);
$coll = collect($errors);
$messages = $coll->flatten();
foreach ($messages as $message) {
echo $message . "\n";
}
}
该示例添加了两个自定义消息。
$validator = v::alnum()->notEmpty()->setName('name');
使用 setName 方法,我们为模板占位符设置一个值。
$errors = $ex->findMessages([
'alnum' => '{{name}} must contain only letters and digits',
'notEmpty' => '{{name}} must not be empty'
]);
在这里,我们提供自定义错误消息。
$ php custom_message.php name must contain only letters and digits name must not be empty
来源
Respect Validation - Github 仓库
在本文中,我们使用了 PHP Respect Validation 库来验证值。
作者
列出所有 PHP 教程。