PHP Respect 验证教程

PHP Respect 验证教程展示了如何使用 Respect Validation 包来验证 PHP 值。

Respect 验证

Respect 验证是一个 PHP 独立验证库。

安装

$ composer require respect/validation
$ composer require tightenco/collect

我们安装了“Respect 验证”软件包和 Laravel 的收集软件包。

Respect 验证简单示例

在第一个示例中,我们展示了如何进行非常简单的验证。

simple.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";
}

该示例验证一个值。

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

新增字符

我们可以在规则中添加一个字符。

add_character.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规则中添加了破折号。

$name = "Vane-Tempest-Stewart";

一些名称可能包含破折号。

$r = v::alnum('-')->validate($name);

我们在alnum规则中添加破折号。

Respect 验证链接规则

规则可以链接在一起。

chaining.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";
}

在示例中,我们有两个规则:alnumlength

$r = v::alnum()->length(4, null)->validate($name);

该名称只能包含字母数字字符,并且必须至少包含四个字符。

Respect 验证合并规则

规则的组合类似于链接技术。 Rules\AllOf用于组合多个规则。

combine_rules.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

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) {
        echomessage . "\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

Respect 验证范围

between规则验证范围,包括整数,字符和日期。

between_rule.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规则。

$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 验证对象

对象属性使用attribute()进行验证。

user.php

<?php

class User {

    private name;
    privateemail;

    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

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) {
        echomessage . "\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

This is the output.

自定义消息

我们可以提供自定义验证消息。

custom_message.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) {
        echomessage . "\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

您可能也对以下相关教程感兴趣: Rakit 验证教程Valitron 教程PHP PDO 教程Twig 教程PHP 文件系统PHP 教程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程