最新赞助活动温馨提示:自愿赞助服务器费用,学生和没有工作的整站资源免费下载!
头像

超级实用的PHP验证器类Validator源码

来源:http://www.erdangjiade.com/php/8543.html 沐浴春风 2018-03-20 15:37浏览(1234)

实用的PHP验证器类Validator 2018年03月17日 22:05helloweba.net 作者:月光光 标签:PHP Laravel Particle\Validator是一个小巧优雅的实用的PHP验证类库,提供了一个非常简洁的API。它无需依赖其他组件,提供友好的文档,并且有利于扩展。

0、请不要问“在不在”之类的问题,有问题直接问!1、学生或暂时没有工作的童鞋,整站资源免费下载!2、¥9.9充值终身VIP会员,加我微信,826096331 拉你进VIP群学习!3、程序员加油,技术改变世界。 在线 充值

超级实用的PHP验证器类Validator源码
分类:PHP > 插件 难易:中级
查看演示 下载资源:

加我微信,拉你进VIP群学习:

下载资源 下载积分: 51 积分

使用composer安装 提供非常方便的composer安装: composer require particle/validator 使用

在使用之前请确保在项目中引入了 vendor/autoload.php 文件。

<?php 
use Particle\Validator\Validator;

require './vendor/autoload.php';

$v = new Validator;
$v->required('first_name')->lengthBetween(2, 30)->alpha();
$v->required('last_name')->lengthBetween(2, 40)->alpha();
$data = [
    'first_name' => 'John',
    'last_name' => 'Doe',
];

$result = $v->validate($data);
$result->isValid();  // 返回bool(true or false)

Required and optional

这个方法是内置的,主要用于检测某个key的值,如果希望检测的某个值可能为空,而希望验证通过,则我们可以设置该方法的第三个参数为true。(默认值为false 代表不能为空值)。其中 required 和 optional 的区别主要是如下 required 是验证的值必须存在;而 optional 是可选的,如果key存在,则验证,不存在,则不用验证。
数组方式验证

// 基本验证
$values = [
    'user' => [
        'username' => 'bob', 
    ]
];

$v = new Validator;
$v->required('user.username')->alpha();

$result = $v->validate($values);
$result->getValues() === $values; // bool(true)

内置验证规则

allowEmpty(callable $callback)是否可以为空值,true则通过 反之亦然。

$v = new Validator;
// 如果用户名存在,则验证通过
$v->required('name')->allowEmpty(function (array $values) {
    return $values['namePresent'] === true;
});
$v->validate(['namePresent' => true, 'name' => 'John'])->isValid(); // true
$v->validate(['namePresent' => true])->isValid(); // true
$v->validate(['namePresent' => false])->isValid(); // false

alnum($allowWhitespace = false) 包含数字和字母,不允许空格,(a-z, A-Z, 0-9)

alpha($allowWhitespace = false) 验证的字符包含 (a-z, A-Z),不允许空格。

between($min, $max) 验证必须在一个数值范围,如(12, 34)。

bool() 布尔Boolean值验证。

callback(callable $callable) 回调验证。

creditCard() 验证信用卡,验证之前必须先安装 composer require byrokrat/checkdigit。

datetime($format = null) 验证日期。

digits() 一串数字字符串验证,不包含小数。

each(callable $callable) 遍历验证。

email() 验证邮箱。

equals($value) 验证是否相等。

float()验证浮点数。

greaterThan($value) 大于某个值。

hash($hashAlgorithm, $allowUppercase = false) md5 sha1等验证。

inArray(array $array, $strict = true) 验证是否属于数组范围内

integer($strict = false) 整数验证。

isArray() 数组验证。

json()json格式字符串验证。

length($length) 长度验证。

lengthBetween($min, $max) 长度范围验证。

lessThan($value) 小于验证。

numeric() 验证浮点数和整数。

phone($countryCode) 验证手机号,使用之前先安装 composer require giggsey/libphonenumber-for-php。

regex($regex) 正则验证。

required(callable $callback) 必须存在,不能为空。

string() 字符串验证。

url($schemes = []) 验证URL。

uuid($version = Uuid::VALID_FORMAT) 验证UUID。
提示信息覆盖

Particle\Validator为默认规则提供了默认的消息提示,当然你也可以为验证规则设置特定的消息提示以覆盖默认值。

$v = new Validator;
$v->required('first_name')->lengthBetween(0, 5);
$v->required('last_name')->lengthBetween(0, 5);

$v->overwriteDefaultMessages([
    LengthBetween::TOO_LONG => 'It\'s too long, that value'
]);

$v->overwriteMessages([
    'first_name' => [
        LengthBetween::TOO_LONG => 'First name is too long, mate'
    ]
]);

$result = $v->validate([
    'first_name' => 'this is too long',
    'last_name' => 'this is also too long',
]);

var_dump($result->getMessages());

验证场景

验证库一般都可以根据场景来使用不同的验证,比如插入数据和更新数据的区别:

$v = new Validator;
// 定义一个插入时候的验证规则
$v->context('insert', function(Validator $context) {
    $context->required('first_name')->lengthBetween(2, 30);
});
// 定义一个更新时候的验证规则
$v->context('update', function(Validator $context) {
    $context->optional('first_name')->lengthBetween(2, 30);
});

$v->validate([], 'update')->isValid(); // bool(true)
$v->validate([], 'insert')->isValid(); // bool(false), because first_name is required.

在MVC架构中使用验证器

很多时候,我们的项目都是进行分层开发的,例如常见的MVC,则我们可以在分层项目中调用该验证类,示例如下:

use Particle\Validator\ValidationResult;
use Particle\Validator\Validator;

class MyEntity 
{
    protected $id;

    public function setId($id)
    {
        $this->id = $id;
        return $this;
    }

    public function validate() {
        $v = new Validator;
        $v->required('id')->integer();

        return new $v->validate($this->values());
    }

    protected function values()
    {
        return [
            'id' => $this->id,
        ];
    }
}

// in a controller:
$entity = new Entity();
$entity->setId($this->getParam('id'));

$result = $entity->validate();

if (!$result->isValid()) {
    return $this->renderTemplate([
        'messages' => $result->getMessages() // or maybe even just pass in $result.
    ]);
}

当然,如果默认的验证规则不能满足时,我们可以再扩展定制规则,有关定制扩展规则,请参考项目官网:http://validator.particle-php.com/en/latest/.
声明:本文为原创文章,如需转载,请注明来源erdangjiade.com并保留原文链接:https://www.erdangjiade.com/php/8543.html
评论9
头像

友情提示:垃圾评论一律封号 加我微信:826096331拉你进VIP群学习群

  • 头像 8楼
    03-17 22:02
    lauzhicheng
    很不错的,学习啦
  • 头像 7楼
    11-19 08:55
    A~就是你
    验证类挺不错。
  • 头像 6楼
    07-10 08:28
    若水寒空小贝
    闻公号消息 今年2月份,网约车司机刘师
  • 头像 5楼
    06-06 19:54
    ngu137
    validator验证类不错啊的功能
  • 头像 4楼
    06-06 17:08
    若水寒空小贝
    包含数字和字母,不允许空格,(a-z, A-Z, 0-9)
  • 头像 3楼
    04-22 13:11
    Archer
    学习了学习了
  • 头像 板凳
    04-21 19:28
    ngu137
    PHP验证器类学习学习啦
  • 头像 椅子
    03-26 20:04
    wjs123
    666好厉害
  • 头像 沙发
    03-22 08:21
    ngu137
    很不错的源码类文件,学习啦
1 2