srcoder / normalize-strings
字符串规范化的可重用方法
1.1.1
2017-08-30 10:12 UTC
Requires
- php: ^7.0
Requires (Dev)
- phpunit/phpunit: ^6.3
README
用于规范化字符串。实现大多数基本转换。请找到一个新版本,创建一个PR:-)
依赖关系
需要至少PHP 7.0+
安装
composer require srcoder/normalize-strings
规则
Srcoder\Normalize\Rule\Append(string $append)
Srcoder\Normalize\Rule\Prepend(string $prepend)
Srcoder\Normalize\Rule\Lowercase
Srcoder\Normalize\Rule\Uppercase
Srcoder\Normalize\Rule\Replace($search, $replace)
Srcoder\Normalize\Rule\Trim(string $chars)
Srcoder\Normalize\Rule\Words(string $delimiters)
Srcoder\Normalize\Rule\RegExp(string $pattern, string $replacement)
Srcoder\Normalize\Rule\Callback(\Closure $closure)
Srcoder\Normalize\Rule\Safe(RuleInterface $rule, int $limit = -1)
缓存
规范化字符串内部缓存,对于相同字符串的第二次查找将返回缓存结果。
基本用法
这是规范化器的基本用法。
$normalizer = new Srcoder\Normalize\Normalize([ new Srcoder\Normalize\Rule\Uppercase, new Srcoder\Normalize\Rule\Append(' World'), new Srcoder\Normalize\Rule\Append('!') ]); echo $normalizer->normalize('Hello'); // "HELLO World!" // Adding rules $normalizer->addRule(new Srcoder\Normalize\Rule\Replace('HELLO', 'Bye')); echo $normalizer->normalize('Hello'); // "Bye World!"
链式操作
如果只添加简单内容,您可以对规范化器进行链式操作。
// ... continue $newNormalizer = new Srcoder\Normalize\Normalize([ new Srcoder\Normalize\Rule\Prepend('Good') ]); echo $newNormalizer->normalize('Hello'); // "GoodHello" // Set chain $newNormalizer->setChain($normalizer); echo $newNormalizer->normalize('Hello'); // "GoodBye World!"
添加/前置规则
您可以向规范化器添加或前置规则。
// ... continue $newNormalizer->prependRule(new Srcoder\Normalize\RegExp('#[A-Z]+#', '+')); echo $newNormalizer->normalize('Hello'); // "GoodBye+ELLO World!"
一次性添加多个规则
就像在构造函数中一样,您可以一次性添加多个规则。
addRules([Rule, Rule])
prependRules([Rule, Rule])
添加自己的规则
只需实现Sroder\Normalize\Rule\RuleInterface
class sha1Rule implements Sroder\Normalize\Rule\RuleInterface { public function apply(string $string) : string { return sha1($strings); } } $myNormalizer = new Sroder\Normalize([ new sha1Rule ]); echo $myNormalizer->normalize('test'); // "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"
管理器(实例)
如果您需要使规范化器在各个地方都可用。
// ... continue $normalizeManager = new Srcoder\Normalize\Manager(); // or static $normalizeManager = Srcoder\Normalize\Manager::instance(); // Add already defined normalizer $normalizeManager->add($normalizer, 'helloworld'); // createAndAdd $normalizeManager->createAndAdd( [ // Rules new Srcoder\Normalize\Rule\RegExp("#[_ ]*([A-Z])#", "_\\1"), new Srcoder\Normalize\Rule\Trim("_ \t\n\r\0\x0B"), new Srcoder\Normalize\Rule\Lowercase() ], 'underscore' // identifier //, 'helloworld' // chain ); // ... snip to somewhere else echo $normalizeManager->get('helloworld') ->normalize('Ibiza!'); // "Bye Ibiza!!" echo Srcoder\Normalize\Manager::instance() ->get('underscore') ->normalize('HelloWorld'); // "hello_world"
特质
要在您的任何类中使用规范化器,可以使用特质。
class MyAwesomeClass { use \Srcoder\Normalize\NormalizeTrait; public function __construct() { $this->normalizerInit(); $this->addNormalizeRules( [ new Srcoder\Normalize\Rule\Trim('Ho'), new Srcoder\Normalize\Rule\Uppercase, ] ); } } $myAwesome = new MyAwesomeClass; echo $myAwesome->normalize('Hello'); // "ELL"
测试
所有代码都经过测试,如果您想创建一个PR,也请运行这些测试。