korchasa / matcho
此软件包已被 放弃 且不再维护。未建议替代软件包。
PHP 的简单模式匹配
1.1
2019-09-22 19:44 UTC
Requires
- php: >=7.1
- sebastian/diff: ^2.0 || ^3.0
Requires (Dev)
- infection/infection: ^0.12
- phpstan/phpstan: ^0.10.5
- phpunit/phpunit: ^6.0
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^2.9.2 || ^3.0
Suggests
- ext-json: *
This package is auto-updated.
Last update: 2024-02-23 09:44:15 UTC
README
安装
composer require korchasa/matcho
在测试中的使用
使用 ***
表示“任何值”。通过 use AssertMatchedTrait
连接断言。
<?php use korchasa\Vhs\AssertMatchedTrait; use PHPUnit\Framework\TestCase; class IntegrationTest extends TestCase { use AssertMatchedTrait; public function testResponseJson() { $this->assertJsonMatched( '{ "baz": { "value": 1 }, "items": [ { "a": "b***", "c": 2 }, "***" ] }', $this->server()->call()->responseJson() ); /** Given value of `items.0.c` not match pattern `2` --- Pattern +++ Actual @@ @@ -2 +22 */ } public function testArray() { $this->assertArrayMatched( [ "foo" => "somestring***", // check string pattern "bar" => "***", // check only presence "baz" => 42 // check presence and value ], $complexArray ); /** Given value has no key `baz` --- Pattern +++ Actual @@ @@ array ( - 'foo' => 'something***', - 'baz' => "***", + 'foo' => 'something2', */ } public function testString() { $this->assertStringMatched('cu***mber', $somestring); /** Given value not match pattern --- Pattern +++ Actual @@ @@ -cu***mber +kucumber */ } }
在业务逻辑中的使用
使用 ***
表示“任何值”。
函数或类
match_array([ 'foo' => [ 'any' => '***' ] ], $someArray); Match::array([ 'foo' => [ 'any' => '***' ] ], $someArray);
数组
$someArray = [ 'foo' => [ 'any' => 11 ] ]; Match::array([ 'foo' => [ 'any' => '***' ]], $someArray); //true Match::array([ 'foo' => [], $someArray); //true Match::array([ 'foo' => [ 'not_any' => 13 ]], $someArray); //false (missed key foo.not_any) Match::array([ 'foo' => [ 'any' => 12 ]], $someArray); //false (not equals values foo.any)
JSON
$someJson = '{ "foo": "bar", "baz": { "value": 1 }, "items": [ { "a": "b", "c": 2 }, { "z": "x", "c": 3 } ] }'; Match::json('{ "foo": "bar", "baz": "***", "items": [ "***", { "z": "x", "c": 3 } ] }', $someJson ); //true
字符串
Match::string('12345***0ab***f', '1234567890abcdef'); //true
自定义“任何值”符号
Match::string('12345%%%0ab%%%f', '1234567890abcdef', '%%%'); //true
默认值与 *** 的区别
Match::string('123450ab**>cde<**f', '1234567890abcdef'); //true Match::defaultString('123450ab**>cde<**f'); //123450abcdef Match::defaultString('**>foo<**'); //foo Match::defaultString('***1'); //1
情况(尚未实现)
$processingResult = Match::stringCase('user@company2.com') ->case('***@company1.com', function($val) { return $this->processCompany1Email($val); }) ->case('***@company2.com', function($val) { return $this->processCompany2Email($val); }) ->default(function ($val) { return $this->processUsualEmails($val); });