srcoder/normalize-strings

字符串规范化的可重用方法

1.1.1 2017-08-30 10:12 UTC

This package is auto-updated.

Last update: 2024-09-20 22:31:32 UTC


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,也请运行这些测试。