yiisoft/strings

Yii 字符串助手

2.4.0 2023-12-22 07:29 UTC

README

Yii

Yii 字符串


Latest Stable Version Total Downloads Build status Code coverage Mutation testing badge static analysis type-coverage

该包提供

  • StringHelper,它具有用于处理字符串的静态方法;
  • NumericHelper,它具有用于处理数字字符串的静态方法;
  • Inflector提供如toPlural()toSlug()等方法,可以根据给定的字符串派生出新的字符串;
  • WildcardPattern是一个用于匹配字符串的shell通配符模式;
  • CombinedRegexp是一个优化多个正则表达式匹配的包装器,而MemoizedCombinedRegexp是一个装饰器,它缓存CombinedRegexp的结果以提高匹配速度。

需求

  • PHP 8.0 或更高版本。
  • PHP 的mbstring扩展。

安装

可以使用Composer安装此包

composer require yiisoft/strings

StringHelper 使用

字符串助手方法都是静态的,所以用法如下

echo \Yiisoft\Strings\StringHelper::countWords('Strings are cool!'); // 3

总体上,助手有以下方法组。

字节

  • byteLength
  • byteSubstring

文件路径

  • baseName
  • directoryName

子串

  • substring
  • replaceSubstring
  • startsWith
  • startsWithIgnoringCase
  • endsWith
  • endsWithIgnoringCase
  • findBetween
  • findBetweenFirst
  • findBetweenLast

截断

  • truncateBegin
  • truncateMiddle
  • truncateEnd
  • truncateWords
  • trim
  • ltrim
  • rtrim

计数

  • length
  • countWords

小写和大写

  • lowercase
  • uppercase
  • uppercaseFirstCharacter
  • uppercaseFirstCharacterInEachWord

URL 友好的 base64

  • base64UrlEncode
  • base64UrlDecode

其他

  • parsePath
  • split

NumericHelper 使用

Numeric 助手方法都是静态的,所以用法如下

echo \Yiisoft\Strings\NumericHelper::toOrdinal(3); // 3rd

以下方法可用

  • toOrdinal
  • normalize
  • isInteger

Inflector 使用

echo (new \Yiisoft\Strings\Inflector())
    ->withoutIntl()
    ->toSlug('Strings are cool!'); // strings-are-cool

总体上,inflector 有以下方法组。

复数和单数

  • toPlural
  • toSingular

转写

  • toTransliterated

大小写转换

  • pascalCaseToId
  • toPascalCase
  • toCamelCase

单词和句子

  • toSentence
  • toWords
  • toHumanReadable

类和数据库表

  • classToTable
  • tableToClass

URLs

  • toSlug

WildcardPattern 使用

WildcardPattern允许简单的POSIX风格字符串匹配。

use \Yiisoft\Strings\WildcardPattern;

$startsWithTest = new WildcardPattern('test*');
if ($startsWithTest->match('testIfThisIsTrue')) {
    echo 'It starts with "test"!';
}

在模式中以下字符是特殊的

  • \如果未关闭转义字符的使用,则转义其他特殊字符。
  • *匹配任何字符串,包括空字符串,但默认情况下不包括分隔符(如/\)。
  • **匹配任何字符串,包括空字符串和分隔符。
  • ?匹配任何单个字符。
  • [seq]匹配seq中的任何字符。
  • [a-z]匹配从a到z的任何字符。
  • [!seq]匹配不在seq中的任何字符。
  • [[:alnum:]] 匹配 POSIX 风格的字符类。

在调用 match() 之前可以调用 ignoreCase() 以获得不区分大小写的匹配。

use \Yiisoft\Strings\WildcardPattern;

$startsWithTest = new WildcardPattern('test*');
if ($startsWithTest
    ->ignoreCase()
    ->match('tEStIfThisIsTrue')) {
    echo 'It starts with "test"!';
}

CombinedRegexp 的使用

CombinedRegexp 优化匹配多个正则表达式。

use \Yiisoft\Strings\CombinedRegexp;

$patterns = [
    'first',
    'second',
    '^a\d$',
];
$regexp = new CombinedRegexp($patterns, 'i');
$regexp->matches('a5'); // true – matches the third pattern
$regexp->matches('A5'); // true – matches the third pattern because of `i` flag that is applied to all regular expressions
$regexp->getMatchingPattern('a5'); // '^a\d$' – the pattern that matched
$regexp->getMatchingPatternPosition('a5'); // 2 – the index of the pattern in the array
$regexp->getCompiledPattern(); // '~(?|first|second()|^a\d$()())~'

MemoizedCombinedRegexp 的使用

MemoizedCombinedRegexpCombinedRegexp 的结果缓存在内存中。当相同的输入字符串需要多次匹配,或者调用不同的 CombinedRegexp 方法时,这很有用。

use \Yiisoft\Strings\CombinedRegexp;
use \Yiisoft\Strings\MemoizedCombinedRegexp;

$patterns = [
    'first',
    'second',
    '^a\d$',
];
$regexp = new MemoizedCombinedRegexp(new CombinedRegexp($patterns, 'i'));
$regexp->matches('a5'); // Fires `preg_match` inside the `CombinedRegexp`.
$regexp->matches('first'); // Fires `preg_match` inside the `CombinedRegexp`.
$regexp->matches('a5'); // Does not fire `preg_match` inside the `CombinedRegexp` because the result is cached.
$regexp->getMatchingPattern('a5'); // The result is cached so no `preg_match` is fired.
$regexp->getMatchingPatternPosition('a5'); // The result is cached so no `preg_match` is fired.

// The following code fires only once matching mechanism.
if ($regexp->matches('second')) {
    echo sprintf(
        'Matched the pattern "%s" which is on the position "%s" in the expressions list.',
        $regexp->getMatchingPattern('second'),
        $regexp->getMatchingPatternPosition('second'),
    );
}

文档

如果您需要帮助或有问题,Yii 论坛 是一个不错的选择。您还可以查看其他 Yii 社区资源

许可

Yii 字符串是免费软件。它根据 BSD 许可协议发布。有关更多信息,请参阅 LICENSE

Yii 软件 维护。

支持项目

Open Collective

关注更新

Official website Twitter Telegram Facebook Slack