码度8/匹配器

超新鲜PHP匹配类(PHP 7.x OOP)

2.0.5 2017-05-14 12:51 UTC

This package is not auto-updated.

Last update: 2024-09-20 20:56:54 UTC


README

Total Downloads Latest Stable Version

License

PHP 对象/方法,帮助您验证复杂嵌套PHP数组的结构。类似于XML或JSON模式。

use C0DE8\MatchMaker\Manager;

use C0DE8\MatchMaker\Exception\InvalidValueTypeException;
use C0DE8\MatchMaker\Exception\KeyMatcherFailException;
use C0DE8\MatchMaker\Exception\KeyMatchFailException;
use C0DE8\MatchMaker\Exception\MatcherException;
 
$books = [
    [
        'type'     => 'book',
        'title'    => 'Geography book',
        'chapters' => [
            'eu' => ['title' => 'Europe',  'interesting' => true],
            'as' => ['title' => 'America', 'interesting' => false]
        ],
        'price'    => 19.99
    ],
    [
        'type'     => 'book',
        'title'    => 'Foreign languages book',
        'chapters' => [
            'de' => ['title' => 'Deutsch']
        ],
        'price'    => 29.99
    ]
];

$pattern = [
    '*' => [
        'type'     => 'book',
        'title'    => ':string contains(book)',
        'chapters' => [
            ':string length(2) {1,3}' => [
                'title'        => ':string',
                'interesting?' => ':bool',
            ]
        ],
        'price'    => ':float'
    ]
];
 
try {
 
    (new Manager)->matchAgainst($books, $pattern); // return true (otherwise throws an exception)
 
} catch (\InvalidArgumentException $excetpion) {
 
    echo $exception->getMessage();
 
} catch (InvalidValueTypeException $excetpion) {
 
    echo $exception->getMessage();
 
} catch (KeyMatcherFailException $excetpion) {
 
    echo $exception->getMessage();
 
} catch (MatcherException $excetpion) {
 
    echo $exception->getMessage();
 
} catch (\Exception $excetpion) {
 
    echo $exception->getMessage();
}

它可以用来检查来自不同来源(JSON、XML、Post 数据)的标量值、对象或数组。

匹配规则

匹配规则是字符串,以“:”开头(冒号)。您可以使用空格连接多个匹配器。匹配器可以是任何可调用的(函数名或闭包)。您可以添加自己的规则或替换标准规则。

  • 通用

    • empty
    • nonempty
    • required
    • in(a, b, ...)
    • mixed
    • any
  • 类型

    • array
    • bool
    • boolean
    • callable
    • double
    • float
    • int
    • integer
    • long
    • numeric
    • number
    • object
    • real
    • resource
    • scalar
    • string
  • 数字

    • gt(n)
    • gte(n)
    • lt(n)
    • lte(n)
    • negative
    • positive
    • between(a, b)
  • 字符串

    • alnum
    • alpha
    • cntrl
    • digit
    • graph
    • lower
    • print
    • punct
    • space
    • upper
    • xdigit
    • regexp(pattern)
    • email
    • url
    • ip
    • length(n)
    • min(n)
    • max(n)
    • contains(needle)
    • starts(s)
    • ends(s)
    • json
    • date
  • 数组

    • count(n)
    • keys(key1, key2, ...)
  • 对象

    • instance(class)
    • class_exists(className)
    • property(name, value)
    • method(name, value)

更多详情请见 此处

键的量词

  • ! - 必须有一个键(默认)
  • ? - 可选键
  • * - 任意数量的键
  • {3} - 精确键数
  • {1,5} - 范围

对于匹配器(即“:string”),默认量词是“*”

安装

  • 使用Composer将匹配器安装到您的项目中

稳定版

composer require c0de8/matchmaker:*

开发版

composer require c0de8/matchmaker:dev-master

PHPUnit

此包期望(使用)PHPUnit 6.x.x 版本。 网站

(但PHPUnit 5.x.x 版本也可以使用)

许可证

版权(c)2017 Bjoern Ellebrecht

版权(c)2014 Petr Trofimov

MIT许可证

特此授予任何人免费获得本软件及其相关文档文件(“软件”)的副本的权利,以无限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向提供软件的人授予这样做,但受以下条件的约束

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定用途和非侵权性保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论这些责任是合同、侵权或其他方式产生的,与软件或其使用或其他交易有关。