PHPRespectValidation教程展示了如何使用RespectValidation包验证PHP值。
$ php -v php -v PHP 8.1.2 (cli) (built: Aug 8 2022 07:28:23) (NTS) ...
我们使用PHP版本8.1.2。
尊重验证
RespectValidation是一个PHP独立验证库。
安装
$ composer require respect/validation $ composer require tightenco/collect
我们安装RespectValidation包和Laravel的collection包。
尊重验证简单示例
在第一个示例中,我们展示了如何进行非常简单的验证。
<?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
规则中添加了一个破折号。
尊重验证链规则
规则可以链接。
<?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);
名称必须仅包含字母数字字符,并且必须至少包含四个字符。
尊重验证组合规则
规则的组合类似于链接技术。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
组合在一起。
尊重验证断言函数
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
验证名称值。
$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
这是输出。
尊重规则之间的验证
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
变量是否在两个指定日期之间。
尊重验证对象
对象属性使用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
这是输出。
在本教程中,我们使用了PHPRespectValidation库来验证值。
列出所有PHP教程。