企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
{% raw %} # PHP Respect 验证教程 > 原文: [https://zetcode.com/php/respectvalidation/](https://zetcode.com/php/respectvalidation/) PHP Respect 验证教程展示了如何使用 Respect 验证包来验证 PHP 值。 ## Respect 验证 Respect 验证是一个 PHP 独立验证库。 ## 安装 ```php $ composer require respect/validation $ composer require tightenco/collect ``` 我们安装了 Respect 验证包和 Laravel 的集合包。 ## Respect 验证简单示例 在第一个示例中,我们展示了如何进行非常简单的验证。 `simple.php` ```php <?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"; } ``` 该示例验证一个值。 ```php use Respect\Validation\Validator as v; ``` 我们包括验证器。 ```php $r = v::alnum()->validate($name); ``` `alnum`是一个允许字母数字值的验证规则。 它还允许有空间。 `validate()`方法将验证规则,并返回指示失败或成功的布尔值。 ```php if ($r) { echo "Validation passed"; } else { echo "Validation failed"; } ``` 基于返回的值,我们显示验证消息。 ```php $ php simple.php Validation passed ``` 这是输出。 ## 新增字符 我们可以在规则中添加一个字符。 `add_character.php` ```php <?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`规则中添加了破折号。 ```php $name = "Vane-Tempest-Stewart"; ``` 一些名称可能包含破折号。 ```php $r = v::alnum('-')->validate($name); ``` 我们在`alnum`规则中添加破折号。 ## Respect 验证链接规则 规则可以链接在一起。 `chaining.php` ```php <?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`。 ```php $r = v::alnum()->length(4, null)->validate($name); ``` 该名称只能包含字母数字字符,并且必须至少包含四个字符。 ## Respect 验证合并规则 规则的组合类似于链接技术。 `Rules\AllOf`用于组合多个规则。 `combine_rules.php` ```php <?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 验证断言函数 `validate()`方法返回一个布尔值。 `assert()`方法返回完整的验证报告。 `assert_fun.php` ```php <?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()`方法,并显示错误消息。 ```php $validator->assert($name); ``` 我们使用`assert()`验证名称值。 ```php $coll = collect($ex->getMessages()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; } ``` 借助 Laravel 的集合,我们显示了错误消息。 ```php $ php assert_fun.php "" must contain only letters (a-z) and digits (0-9) "" must not be empty ``` This is the output. ## Respect 验证范围 `between`规则验证范围,包括整数,字符和日期。 `between_rule.php` ```php <?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`规则。 ```php $r = v::intVal()->between(18, 99)->validate($age); ``` 此规则检查`$age`变量是否在 18 到 99 之间。 ```php $r = v::stringType()->between('a', 'c')->validate($char); ``` 此规则检查`$char`变量是否在'a'和'c'字符之间。 ```php $r = v::date()->between('2009-01-01', '2019-01-01')->validate($myDate); ``` 该规则检查`$myDate`变量是否在两个指定的日期之间。 ## Respect 验证对象 对象属性使用`attribute()`进行验证。 `user.php` ```php <?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`。 `validate_object.php` ```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`类的属性。 ```php $userValidator = v::attribute('name', v::alnum()->length(4, null)) ->attribute('email', v::email()); ``` 这些是用户对象属性的规则。 ```php $ php validate_object.php name must have a length greater than 4 email must be valid email ``` This is the output. ## 自定义消息 我们可以提供自定义验证消息。 `custom_message.php` ```php <?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"; } } ``` 该示例添加了两个自定义消息。 ```php $validator = v::alnum()->notEmpty()->setName('name'); ``` 使用`setName()`方法,我们为模板占位符设置了一个值。 ```php $errors = $ex->findMessages([ 'alnum' => '{{name}} must contain only letters and digits', 'notEmpty' => '{{name}} must not be empty' ]); ``` 在这里,我们提供自定义错误消息。 ```php $ php custom_message.php name must contain only letters and digits name must not be empty ``` This is the output. 您可能也对以下相关教程感兴趣: [PHP Rakit 验证教程](/php/rakitvalidation/), [Valitron 教程](/php/valitron/), [PHP PDO 教程](/php/pdo/), [Twig 教程](/php/twig/), [PHP 文件系统函数](/articles/phpfilesystemfunctions/), [PHP 教程](/lang/php/)。 在本教程中,我们使用了 PHP Respect 验证库来验证值。 {% endraw %}