具有多字节支持的 PHP 字符串操作库。与 PHP 5.4+、PHP 7+ 和 HHVM 兼容。
s('string')->toTitleCase()->ensureRight('y') == 'Stringy'
请参阅 1.x 分支或 2.x 分支以获取较旧的文档。
为什么?
安装
面向对象和链接
实现的接口
PHP 5.6 创建
静态弦线
类方法
创造
实例方法
附加 | 在 | 之间 | 骆驼化 |
字符 | 折叠空白 | 包含 | 包含全部 |
包含任何 | 计数子串 | 达舍尔化 | 划界 |
结束于 | 以任意结尾 | 确保左 | 确保权利 |
第一的 | 获取编码 | 有小写 | 有大写 |
html解码 | html编码 | 人性化 | 索引 |
最后索引 | 插入 | 是阿尔法 | 是字母数字 |
是Base64 | 为空白 | 是十六进制 | 伊森 |
是小写 | 已序列化 | 是大写 | 最后的 |
长度 | 线 | 最长公共前缀 | 最长公共后缀 |
最长公共子串 | 小写第一 | 软垫 | 垫两者 |
垫左 | 右键盘 | 前置 | 正则表达式替换 |
删除左 | 删除右 | 重复 | 代替 |
撤销 | 安全截断 | 随机播放 | slugify |
片 | 分裂 | 开始于 | 以任何开头 |
去除空白 | 子字符串 | 环绕 | 交换案例 |
整齐的 | 赋予标题 | 转 Ascii | 到布尔值 |
转为小写 | 到空间 | 标签页 | 标题大小写 |
改为大写 | 修剪 | 向左修剪 | 右修剪 |
截短 | 下划线 | 上骆驼化 | 大写优先 |
扩展
测试
执照
部分原因是许多 PHP 标准字符串函数缺乏多字节支持(包括 UTF-8)。而且还为mbstring
模块的多字节兼容函数提供面向对象的包装器。 Stringy 处理一些怪癖,提供额外的功能,并希望使字符串更容易使用!
// 标准库strtoupper('fòbàř'); // 'FòôBàř'strlen('fòôbàř'); // 10 // mbstringmb_strtoupper('fòbàř'); // 'FÒÔBÀŘ'mb_strlen('fòbàř'); // '6'// Stringys('fòbàř')->toUpperCase(); // 'FÒÔBÀŘ's('fòbàř')->length(); // '6'
如果您使用 Composer 来管理依赖项,则可以在 Composer.json 文件中包含以下内容:
"require": {"danielstjules/stringy": "~3.1.0"}
然后,运行composer update
或php composer.phar update
后,您可以使用 Composer 的自动加载来加载该类:
需要“供应商/autoload.php”;
否则,您可以直接直接请求该文件:
require_once 'path/to/Stringy/src/Stringy.php';
无论哪种情况,我都建议使用别名。
使用 StringyStringy 作为 S;
请注意,Stringy 依赖mbstring
模块来实现其底层多字节支持。如果未找到该模块,Stringy 将使用 symfony/polyfill-mbstring。 ex-mbstring 是一个非默认但非常常见的模块。例如,对于 debian 和 ubuntu,它包含在 libapache2-mod-php5、php5-cli 和 php5-fpm 中。对于 OSX 用户,这是与自制程序一起安装的任何 PHP 版本的默认设置。如果从头开始编译 PHP,则可以将其包含在--enable-mbstring
标志中。
该库提供了 OO 方法链接,如下所示:
use StringyStringy as S;echo S::create('fòô bàř')->collapseWhitespace()->swapCase(); // 'FÒÔ BÀŘ'
StringyStringy
有一个 __toString() 方法,当该对象在字符串上下文中使用时,该方法返回当前字符串,即: (string) S::create('foo') // 'foo'
StringyStringy
实现了IteratorAggregate
接口,这意味着foreach
可以与该类的实例一起使用:
$stringy = S::create('fòbàř');foreach ($stringy as $char) {echo $char; }// 'fòôbàř'
它实现了Countable
接口,允许使用count()
来检索字符串中的字符数:
$stringy = S::create('fòô');count($stringy); // 3
此外,还实现了ArrayAccess
接口。因此, isset()
可用于检查特定索引处的字符是否存在。由于StringyStringy
是不可变的,任何对offsetSet
或offsetUnset
调用都会抛出异常。然而, offsetGet
已经实现,并且接受正索引和负索引。无效索引会导致OutOfBoundsException
。
$stringy = S::create('bàř');echo $stringy[2]; // 'ř'echo $stringy[-2]; // 'à'isset($stringy[-4]); // 假$stringy[3]; // OutOfBoundsException$stringy[2] = 'a'; // 例外
从 PHP 5.6 开始, use function
可用于导入函数。 Stringy 公开了一个命名空间函数Stringycreate
,它发出与StringyStringy::create()
相同的行为。如果运行 PHP 5.6 或其他支持use function
语法的运行时,您可以利用更简单的 API,如下所示:
use function Stringycreate as s;// 而不是: S::create('fòô bàř')s('fòô bàř')->collapseWhitespace()->swapCase();
“实例方法”下列出的所有方法都可以作为静态包装器的一部分使用。对于 StaticStringy 方法,可选编码应为最后一个参数。返回值未进行强制转换,因此可能是 Stringy、整数、布尔值等类型。
use StringyStaticStringy as S;// 转换为 Stringy::create('fòbàř')->slice(0, 3);// 返回带有字符串“fòô”的 Stringy 对象 S::slice('fòôbàř', 0, 3);
创建 Stringy 对象并将 str 和编码属性分配给提供的值。 $str 在赋值之前被转换为字符串,如果未指定 $encoding,则默认为 mb_internal_encoding()。然后它返回初始化的对象。如果第一个参数是没有 __toString 方法的数组或对象,则抛出 InvalidArgumentException。
$stringy = S::create('fòbàř'); // 'fòôbàř'
字符串对象是不可变的。下面的所有示例都使用 PHP 5.6 函数导入和 PHP 5.4 短数组语法。他们还假设 mb_internal_encoding() 返回的编码是 UTF-8。有关更多详细信息,请参阅上面 create 方法的文档,以及有关 PHP 5.6 创建的说明。
返回附加了 $string 的新字符串。
s('fòô')->append('bàř'); // 'fòôbàř'
返回 $index 处的字符,索引从 0 开始。
s('fòbàř')->at(3); // 'b'
返回 $start 和 $end 之间的子字符串(如果找到)或空字符串。可以提供一个可选的偏移量,从该偏移量开始搜索起始字符串。
s('{foo} 和 {bar}')-> Between('{', '}'); // '富'
返回字符串的驼峰式版本。修剪周围的空格,将数字、空格、破折号和下划线后面的字母大写,并删除空格、破折号和下划线。
s('驼峰式')->camelize(); // '驼峰式'
返回由字符串中的字符组成的数组。
s('fòbàř')->chars(); // ['f', 'ò', 'ô', 'b', 'à', 'ř']
修剪字符串并用单个空格替换连续的空白字符。这包括制表符和换行符,以及多字节空白,例如薄空格和表意空格。
s(' Ο συγγραφέας ')->collapseWhitespace(); // 'Ο συγγραφέας'
如果字符串包含 $needle,则返回 true,否则返回 false。默认情况下,比较区分大小写,但可以通过将 $caseSensitive 设置为 false 来使比较不区分大小写。
s('Ο συγγραφέας είπε')->包含('συγγραφέας'); // 真的
如果字符串包含所有 $needles,则返回 true,否则返回 false。默认情况下,比较区分大小写,但可以通过将 $caseSensitive 设置为 false 来使比较不区分大小写。
s('foo & bar')->containsAll(['foo', 'bar']); // 真的
如果字符串包含任何 $needles,则返回 true,否则返回 false。默认情况下,比较区分大小写,但可以通过将 $caseSensitive 设置为 false 来使比较不区分大小写。
s('str 包含 foo')->containsAny(['foo', 'bar']); // 真的
返回 $substring 在给定字符串中出现的次数。默认情况下,比较区分大小写,但可以通过将 $caseSensitive 设置为 false 来使比较不区分大小写。
s('Ο συγγραφέας είπε')->countSubstr('α'); // 2
返回由破折号分隔的小写且经过修剪的字符串。在大写字符之前插入破折号(字符串的第一个字符除外),并代替空格和下划线。
s('fooBar')->dasherize(); // 'foo-bar'
返回由给定分隔符分隔的小写且经过修剪的字符串。分隔符插入在大写字符之前(字符串的第一个字符除外),并代替空格、破折号和下划线。 Alpha 分隔符不会转换为小写。
s('fooBar')->delimit('::'); // 'foo::bar'
如果字符串以 $substring 结尾则返回 true,否则返回 false。默认情况下,比较区分大小写,但可以通过将 $caseSensitive 设置为 false 来使比较不区分大小写。
s('fòbàř')->endsWith('bàř'); // 真的
如果字符串以任何 $substrings 结尾,则返回 true,否则返回 false。默认情况下,比较区分大小写,但可以通过将 $caseSensitive 设置为 false 来使比较不区分大小写。
s('fòbàř')->endsWithAny(['bàř', 'baz']); // 真的
确保字符串以 $substring 开头。如果没有,则已预先设置。
s('foobar')->ensureLeft('http://'); // 'http://foobar'
确保字符串以 $substring 结尾。如果没有,则会附加。
s('foobar')->ensureRight('.com'); // 'foobar.com'
返回字符串的前 $n 个字符。
s('fòbàř')->first(3); // 'fò'
返回 Stringy 对象使用的编码。
s('fòbàř')->getEncoding(); // 'UTF-8'
如果字符串包含小写字符,则返回 true,否则返回 false。
s('fòbàř')->hasLowerCase(); // 真的
如果字符串包含大写字符,则返回 true,否则返回 false。
s('fòbàř')->hasUpperCase(); // 错误的
将所有 HTML 实体转换为其适用的字符。 html_entity_decode 的别名。有关标志列表,请参阅 http://php.net/manual/en/function.html-entity-decode.php
s('&')->htmlDecode(); // '&'
将所有适用的字符转换为 HTML 实体。 htmlentities 的别名。有关标志列表,请参阅 http://php.net/manual/en/function.htmlentities.php。
s('&')->htmlEncode(); // '&'
将字符串的第一个单词大写,用空格替换下划线,并删除 '_id'。
s('author_id')->人性化(); // '作者'
返回字符串中第一次出现 $needle 的索引,如果未找到则返回 false。接受一个可选的偏移量,从该偏移量开始搜索。负索引从末尾开始搜索
s('字符串')->indexOf('ing'); // 3
返回字符串中最后一次出现 $needle 的索引,如果未找到则返回 false。接受一个可选的偏移量,从该偏移量开始搜索。从字符串中的最后一个字符开始计数,偏移量可能为负数。
s('foobarfoo')->indexOfLast('foo'); // 10
将 $substring 插入到提供的 $index 处的字符串中。
s('fòbř')->insert('à', 4); // 'fòbàř'
如果字符串仅包含字母字符,则返回 true,否则返回 false。
s('丹尼尔')->isAlpha(); // 真的
如果字符串仅包含字母和数字字符,则返回 true,否则返回 false。
s('迪亚尼雅1')->isAlphanumeric(); // 真的
如果字符串采用 Base64 编码,则返回 true,否则返回 false。
s('Zm9vYmFy')->isBase64(); // 真的
如果字符串仅包含空白字符,则返回 true,否则返回 false。
s("nt vf")->isBlank(); // 真的
如果字符串仅包含十六进制字符,则返回 true,否则返回 false。
s('A102F')->isHexadecimal(); // 真的
如果字符串是 JSON,则返回 true,否则返回 false。与 PHP 5.x 中的 json_decode 不同,此方法与 PHP 7 和其他 JSON 解析器一致,因为空字符串不被视为有效的 JSON。
s('{"foo":"bar"}')->isJson(); // 真的
如果字符串仅包含小写字符,则返回 true,否则返回 false。
s('fòbàř')->isLowerCase(); // 真的
如果字符串已序列化,则返回 true,否则返回 false。
s('a:1:{s:3:"foo";s:3:"bar";}')->isSerialized(); // 真的
如果字符串仅包含大写字符,则返回 true,否则返回 false。
s('FÒÔBÀŘ')->isUpperCase(); // 真的
返回字符串的最后 $n 个字符。
s('fòbàř')->last(3); // '酒吧'
返回字符串的长度。 PHP mb_strlen() 函数的别名。
s('fòbàř')->length(); // 6
根据换行符和回车符进行拆分,返回与字符串中的行相对应的 Stringy 对象数组。
s("fòrnbàřn")->lines(); // ['fòô', 'bàř', '']
返回字符串和 $otherStr 之间的最长公共前缀。
s('foobar')->longestCommonPrefix('foobaz'); // '富巴'
返回字符串和 $otherStr 之间的最长公共后缀。
s('fòbàř')->longestCommonSuffix('fòrbàř'); // '酒吧'
返回字符串和 $otherStr 之间的最长公共子字符串。如果是平局,则返回最先出现的那个。
s('foobar')->longestCommonSubstring('boofar'); // '哦'
将提供的字符串的第一个字符转换为小写。
s('Σ foo')->lowerCaseFirst(); // 'σ foo'
使用 $padStr 将字符串填充到给定长度。如果长度小于或等于字符串的长度,则不会进行填充。用于填充的默认字符串是空格,默认类型(“left”、“right”、“both”之一)是“right”。如果 $padType 不是这 3 个值之一,则抛出 InvalidArgumentException。
s('fòbàř')->pad(9, '-/', '左'); // '-/-fòbàř'
返回给定长度的新字符串,使得字符串 string 的两侧都被填充。 $padType 为“both”的 pad() 的别名。
s('foo bar')->padBoth(9, ' '); // ' foo 酒吧 '
返回给定长度的新字符串,以便填充字符串的开头。 $padType 为 'left' 的 pad() 的别名。
s('foo bar')->padLeft(9, ' '); // 'foo 酒吧'
返回给定长度的新字符串,以便填充字符串的末尾。 $padType 为 'right' 的 pad() 的别名。
s('foo bar')->padRight(10, '_*'); // 'foo bar_*_'
返回以 $string 开头的新字符串。
s('bàř')->prepend('fòô'); // 'fòbàř'
将 $str 中所有出现的 $pattern 替换为 $replacement。 mb_ereg_replace() 的别名。请注意,mb_ereg_replace() 中具有多字节模式的“i”选项需要 PHP 5.6+ 才能获得正确的结果。这是由于 PHP < 5.6 中的 Oniguruma 捆绑版本和 HHVM 的当前版本(3.8 及更低版本)缺乏支持。
s('fòô ')->regexReplace('f[ò]+s', 'bàř'); // 'bàř's('fò')->regexReplace('(ò)', '1ô'); // 'fò'
返回删除前缀 $substring(如果存在)的新字符串。
s('fòbàř')->removeLeft('fòô'); // '酒吧'
返回删除后缀 $substring(如果存在)的新字符串。
s('fòbàř')->removeRight('bàř'); // 'fò'
返回给定乘数的重复字符串。 str_repeat 的别名。
s('α')->重复(3); // 'ααα'
将 $str 中所有出现的 $search 替换为 $replacement。
s('fò bàř fòô bàř')->replace('fò ', ''); // '巴巴巴'
返回一个反转的字符串。 strrev() 的多字节版本。
s('fòbàř')->reverse(); // 'řàbôòf'
将字符串截断为给定长度,同时确保它不会拆分单词。如果提供了 $substring,并且发生截断,则该字符串将被进一步截断,以便可以附加子字符串而不超过所需的长度。
s('你今天有什么计划?')->safeTruncate(22, '...');// '你今天有什么计划...'
多字节 str_shuffle() 函数。它返回一个字符串,其中的字符按随机顺序排列。
s('fòbàř')->shuffle(); // 'àôřbòf'
将字符串转换为 URL slug。这包括用最接近的 ASCII 等效项替换非 ASCII 字符、删除剩余的非 ASCII 和非字母数字字符以及用 $replacement 替换空格。替换默认为单个破折号,并且字符串也转换为小写。还可以提供源字符串的语言以进行特定于语言的音译。
s('使用像 fòô bàř 这样的字符串')->slugify(); // 'using-strings-like-foo-bar'
返回从 $start 开始到 $end 指定的索引(但不包括)的子字符串。如果省略 $end,该函数将提取剩余的字符串。如果 $end 为负数,则从字符串末尾开始计算。
s('fòbàř')->slice(3, -1); // '巴'
使用提供的正则表达式拆分字符串,返回 Stringy 对象的数组。可选的整数 $limit 将截断结果。
s('foo,bar,baz')->split(',', 2); // ['foo', '酒吧']
如果字符串以 $substring 开头,则返回 true,否则返回 false。默认情况下,比较区分大小写,但可以通过将 $caseSensitive 设置为 false 来使比较不区分大小写。
s('FÒÔbàřbaz')->startsWith('fòbàř', false); // 真的
如果字符串以任何 $substrings 开头,则返回 true,否则返回 false。默认情况下,比较区分大小写,但可以通过将 $caseSensitive 设置为 false 来使比较不区分大小写。
s('FÒÔbàřbaz')->startsWithAny(['fòô', 'bàř'], false); // 真的
删除所有空白字符。这包括制表符和换行符,以及多字节空白,例如薄空格和表意空格。
s(' Ο συγγραφέας ')->stripWhitespace(); // 'Οσυγγραφέας'
返回从 $start 开始并具有指定 $length 的子字符串。它与 mb_substr() 函数的不同之处在于,提供 null 的 $length 将返回字符串的其余部分,而不是空字符串。
s('fòbàř')->substr(2, 3); // '奥巴'
用给定的子字符串包围字符串。
s(' ͜ ')->surround('ʘ'); // 'ʘ ͜ ʘ'
返回字符串的大小写交换版本。
s('NTανιλ')->swapCase(); // 'VATANNIΛ'
返回一个字符串,其中包含来自 Windows-1252(Word 文档中常用)的智能引号、省略号字符和破折号,并替换为其 ASCII 等效项。
s('“我明白了……”')->tidy(); // '“我懂了...”'
返回一个修剪后的字符串,其中每个单词的第一个字母大写。还接受一个数组 $ignore,允许您列出不大写的单词。
$ignore = ['at', 'by', 'for', 'in', 'of', 'on', 'out', 'to', 'the'];s('我喜欢看电视' )->titleize($ignore);// '我喜欢看电视'
返回字符串的 ASCII 版本。一组非 ASCII 字符将替换为其最接近的 ASCII 字符,其余字符默认会被删除。可以使用以下任意格式提供源字符串的语言或区域设置以进行特定于语言的音译:en、en_GB 或 en-GB。例如,传递“de”会导致“äöü”映射到“aeoeue”,而不是像其他语言中的“aou”。
s('fòbàř')->toAscii(); // 'foobar's('äöü')->toAscii(); // 'aou's('äöü')->toAscii('de'); // 'aeoeue'
返回给定逻辑字符串值的布尔表示形式。例如,“true”、“1”、“on”和“yes”将返回 true。 'false'、'0'、'off' 和 'no' 将返回 false。在所有情况下,都会忽略大小写。对于其他数字字符串,它们的符号将决定返回值。此外,仅由空格组成的空白字符串将返回 false。对于所有其他字符串,返回值是布尔转换的结果。
s('OFF')->toBoolean(); // 错误的
将字符串中的所有字符转换为小写。 PHP mb_strtolower() 的别名。
s('FÒÔBÀŘ')->toLowerCase(); // 'fòbàř'
将字符串中的每个制表符转换为一定数量的空格,如 $tabLength 所定义。默认情况下,每个制表符都会转换为 4 个连续的空格。
s('字符串语音 = "Hi"')->toSpaces(); // ' 字符串语音 = "Hi"'
将每次出现的某些连续空格数(由 $tabLength 定义)转换为制表符。默认情况下,每 4 个连续空格都会转换为一个制表符。
s('fòôbàř')->toTabs();//'fòôbàř'
将字符串中每个单词的第一个字符转换为大写。
s('fò bàř')->toTitleCase(); // 'FòôBàř'
将字符串中的所有字符转换为大写。 PHP mb_strtoupper() 的别名。
s('fòbàř')->toUpperCase(); // 'FÒÔBÀŘ'
返回从字符串开头和结尾删除空格的字符串。支持删除 unicode 空格。接受要剥离的可选字符串而不是默认字符串。
s('fòbàř')->trim(); // 'fòbàř'
返回从字符串开头删除空格的字符串。支持删除 unicode 空格。接受要剥离的可选字符串而不是默认字符串。
s('fòbàř')->trimLeft(); // 'fòôbàř '
返回从字符串末尾删除空格的字符串。支持删除 unicode 空格。接受要剥离的可选字符串而不是默认字符串。
s('fòbàř')->trimRight(); // 'fòbàř'
将字符串截断为给定长度。如果提供了 $substring,并且发生截断,则该字符串将被进一步截断,以便可以附加子字符串而不超过所需的长度。
s('你今天有什么计划?')->truncate(19, '...'); // '你有什么计划...'
返回由下划线分隔的小写且经过修剪的字符串。下划线插入在大写字符之前(字符串的第一个字符除外),并代替空格和破折号。
s('TestUCase')->下划线(); // 'test_u_case'
返回所提供字符串的大驼峰版本。它修剪周围的空格,将数字、空格、破折号和下划线后面的字母大写,并删除空格、破折号、下划线。
s('大驼峰式大小写')->upperCamelize(); // '大驼峰式'
将提供的字符串的第一个字符转换为大写。
s('σ foo')->upperCaseFirst(); // 'Σ foo'
以下是扩展 Stringy 的库列表:
SliceableStringy:PHP 中类似 Python 的字符串切片
SubStringy:高级子字符串方法
在项目目录中,可以使用phpunit
运行测试
根据 MIT 许可证发布 - 有关详细信息,请参阅LICENSE.txt
。