jitsu/string

PHP字符串函数的标准化API

0.1.1 2016-05-07 07:55 UTC

This package is auto-updated.

Last update: 2024-09-11 18:09:17 UTC


README

Jitsu\StringUtil类是一组用于处理PHP字符串的静态方法。

为什么?因为PHP许多内置的字符串函数命名不佳,接口尴尬,并且将某些有争议的有效边缘情况视为错误。

StringUtil解决了这些问题,提供了一个更直观的接口来访问标准的PHP字符串函数,同时提供了内置库中缺少的功能。

该软件包是Jitsu项目的一部分。

安装

使用Composer安装此软件包

composer require jitsu/string

测试

按照以下方式运行单元测试套件

composer install
./vendor/bin/phpunit test/

命名空间

该类在命名空间Jitsu下定义。

API

class Jitsu\StringUtil

处理字符串的静态方法集合。

不区分大小写的函数命名与它们的区分大小写的对应函数相同,通过在字母前加前缀i

StringUtil::length($s)

返回字符串的长度。

这相当于字符串中的字节数。

StringUtil::size($s)

length的别名。参见\Jitsu\StringUtil::length()

StringUtil::isEmpty($s)

确定一个字符串是否为空。

StringUtil::equal($a, $b)

返回两个字符串是否相等。

StringUtil::iEqual($a, $b)

equal类似,但不区分大小写。

StringUtil::chars($s)

返回字符串中的字符数组。

StringUtil::chunks($s, $n)

将字符串分割为长度为$n的块。

每个块都是一个顺序数组。最后一个块可能包含1到$n个字符。

StringUtil::split($s, $delim = null, $limit = null)

通过分隔符将字符串分割成字符串数组。

StringUtil::tokenize($s, $chars)

将字符串分割成标记。

StringUtil::join($sep, $strs = null)

使用分隔符将数组元素连接成单个字符串。

StringUtil::trim($s, $chars = null)

从字符串的开始和结束处移除字符。

StringUtil::rtrim($s, $chars = null)

从字符串的末尾移除字符。

StringUtil::ltrim($s, $chars = null)

从字符串的开始处移除字符。

StringUtil::lower($s)

将字符串转换为小写。

StringUtil::upper($s)

将字符串转换为大写。

StringUtil::lcfirst($s)

将字符串的第一个字符转换为小写。

StringUtil::lowerFirst($s)

lcfirst的别名。参见\Jitsu\StringUtil::lcfirst()

StringUtil::ucfirst($s)

将字符串的第一个字符转换为大写。

StringUtil::upperFirst($s)

ucfirst的别名。参见\Jitsu\StringUtil::ucfirst()

StringUtil::capitalize($s)

ucfirst的别名。参见\Jitsu\StringUtil::ucfirst()

StringUtil::ucwords($s)

将字符串中的所有单词首字母大写。

将任何出现在空白字符之后的字母字符转换为大写。

StringUtil::capitalizeWords($s)

ucwords的别名。参见\Jitsu\StringUtil::ucwords()

StringUtil::replace($s, $old, $new)

替换所有子字符串实例。

只替换子字符串的非重叠实例。

StringUtil::replaceAndCount($s, $old, $new)

替换字符串并返回替换次数。

StringUtil::iReplace($s, $old, $new)

replace类似,但不区分大小写。

参见\Jitsu\StringUtil::replace()

StringUtil::iReplaceAndCount($s, $old, $new)

replaceAndCount类似,但不区分大小写。

参见\Jitsu\StringUtil::replaceAndCount()

StringUtil::replaceMultiple($s, $pairs)

一次执行多个子字符串替换。

允许一次性执行多个替换,这可能比连续执行单个字符串替换更有效。

将所有非重叠的 $pairs 键替换为其对应的值。

StringUtil::translate($s, $old, $new)

重置字符串中的字符。

$old 中列出的字符将更改为 $new 中列出的对应字符。

StringUtil::substring($s, $offset, $length = null)

给定偏移量和长度获取字符串的子串。

StringUtil::replaceSubstring($s, $new, $offset, $length = null)

将字符串的一部分替换为另一个字符串。

参见\Jitsu\StringUtil::replace()

StringUtil::slice($s, $i, $j = null)

给定两个偏移量获取字符串的切片。

给定一个包含的起始索引和一个非包含的结束索引获取字符串的子串。负索引表示从字符串末尾的偏移量。

StringUtil::replaceSlice($s, $new, $i, $j = null)

将字符串的切片替换为另一个字符串。

如果起始索引在结束索引之后,则替换将插入到起始索引处。

参见 \Jitsu\StringUtil::slice()

StringUtil::insert($s, $new, $offset)

在另一个字符串的给定偏移量处插入一个字符串。

StringUtil::pad($s, $n, $pad = ' ')

用另一个字符串填充字符串的开始和结束。

对称地填充字符串,以便结果长度为 $n 个字符。

StringUtil::lpad($s, $n, $pad = ' ')

用另一个字符串填充字符串的开始。

StringUtil::rpad($s, $n, $pad = ' ')

用另一个字符串填充字符串的结束。

StringUtil::wrap($s, $cols, $sep = "\n")

将字符串折叠到指定列数。

通过每隔 $cols 个字符插入字符串,将字符串“折叠”到固定列数。默认情况下插入换行符。

StringUtil::repeat($s, $n)

重复字符串 $n 次。

StringUtil::reverse($s)

反转字符串。

@param string

StringUtil::startingWith($s, $substr)

返回以另一个字符串开头的字符串的一部分。

结果包含指定的子串。

StringUtil::iStartingWith($s, $substr)

startingWith 类似,但大小写不敏感。

参见 \Jitsu\StringUtil::startingWith()

StringUtil::rStartingWith($s, $char)

返回以某个字符开头的字符串的最后部分。

startingWith 不同,这仅适用于单个字符。

StringUtil::startingWithChars($s, $chars)

返回以一系列字符之一开头的字符串的最后部分。

StringUtil::preceding($s, $substr)

返回直到某个子串的字符串的一部分。

StringUtil::iPreceding($s, $substr)

preceding 类似,但大小写不敏感。

参见 \Jitsu\StringUtil::preceding()

StringUtil::words($s, $chars = null)

将字符串拆分为单词。

构成单词字符的定义由当前区域设置确定。

StringUtil::wordCount($s, $chars = null)

计算字符串中的单词数。

参见 \Jitsu\StringUtil::words()

StringUtil::findWords($s, $chars = null)

在字符串中定位单词。

返回一个数组,将字符串中单词的起始索引映射到相应的单词。

参见 \Jitsu\StringUtil::words()

StringUtil::wordWrap($s, $width, $sep = "\n")

单词折叠字符串。

将字符串单词折叠到固定列数。超过最大宽度的单词将被拆分。

StringUtil::compare($a, $b)

按字典顺序比较两个字符串。

如果 $a$b 之前,则返回负数;如果它们相同,则返回 0;如果 $a$b 之后,则返回大于 0 的数字。

StringUtil::iCompare($a, $b)

compare 类似,但大小写不敏感。

参见 \Jitsu\StringUtil::compare()

StringUtil::nCompare($a, $b, $n)

类似于 compare,但只检查前 $n 个字符。

参见 \Jitsu\StringUtil::compare()

StringUtil::inCompare($a, $b, $n)

类似于 nCompare,但区分大小写。

\Jitsu\StringUtil::nCompare()

StringUtil::localeCompare($a, $b)

类似于 compare,但依赖于当前的区域设置。

参见 \Jitsu\StringUtil::compare()

StringUtil::humanCompare($a, $b)

类似于 compare,但使用人类可感知的比较。

以人类观众更自然的方式排序字符串(数字按升序排序等)。

参见 \Jitsu\StringUtil::compare()

StringUtil::iHumanCompare($a, $b)

类似于 humanCompare,但不区分大小写。

\Jitsu\StringUtil::humanCompare()

StringUtil::substringCompare($a, $b, $offset, $length = null)

类似于 compare,但只使用第一个字符串的子字符串。

参见 \Jitsu\StringUtil::compare()

StringUtil::iSubstringCompare($a, $b, $offset, $length = null)

类似于 substringCompare,但不区分大小写。

\Jitsu\StringUtil::substringCompare()

StringUtil::contains($s, $substr, $offset = 0)

确定一个字符串是否包含某个子字符串。

StringUtil::iContains($s, $substr, $offset = 0)

类似于 contains,但不区分大小写。

\Jitsu\StringUtil::contains()

StringUtil::containsChars($s, $chars)

确定一个字符串是否包含多个字符之一。

StringUtil::containsChar($s, $char)

确定一个字符串是否包含一个字符。

StringUtil::beginsWith($s, $prefix)

确定一个字符串是否以某个前缀开始。

StringUtil::iBeginsWith($s, $prefix)

类似于 beginsWith,但不区分大小写。

\Jitsu\StringUtil::beginsWith()

StringUtil::endsWith($s, $suffix)

确定一个字符串是否以某个后缀结束。

StringUtil::iEndsWith($s, $suffix)

类似于 endsWith,但不区分大小写。

\Jitsu\StringUtil::endsWith()

StringUtil::removePrefix($s, $prefix)

从一个字符串中删除一个前缀。

StringUtil::iRemovePrefix($s, $prefix)

类似于 removePrefix,但不区分大小写。

\Jitsu\StringUtil::removePrefix()

StringUtil::removeSuffix($s, $suffix)

从一个字符串中删除一个后缀。

StringUtil::iRemoveSuffix($s, $suffix)

类似于 removeSuffix,但不区分大小写。

\Jitsu\StringUtil::removeSuffix()

StringUtil::find($s, $substr, $offset = 0)

确定一个子字符串在另一个字符串中的位置。

StringUtil::iFind($s, $substr, $offset = 0)

类似于 find,但不区分大小写。

\Jitsu\StringUtil::find()

StringUtil::rFind($s, $substr, $offset = 0)

类似于 find,但从字符串的末尾开始。

\Jitsu\StringUtil::find()

StringUtil::before($s, $substr)

获取一个字符串在某个子字符串之前的部分。

如果它不包含子字符串,则返回整个字符串。

StringUtil::after($s, $substr)

获取一个字符串在某个子字符串之后的最后出现位置。

如果它不包含该子字符串,则返回整个字符串。

StringUtil::isLower($s)

确定一个字符串中的所有字符是否都是小写。

StringUtil::isUpper($s)

确定一个字符串中的所有字符是否都是大写。

StringUtil::isAlphanumeric($s)

确定一个字符串中的所有字符是否都是字母数字。

StringUtil::isAlphabetic($s)

确定一个字符串中的所有字符是否都是字母。

StringUtil::isControl($s)

确定一个字符串中的所有字符是否都是控制字符。

StringUtil::isDecimal($s)

确定一个字符串中的所有字符是否都是十进制数字。

StringUtil::isHex($s)

确定一个字符串中的所有字符是否都是十六进制数字。

StringUtil::isVisible($s)

确定一个字符串中的所有字符是否都是可见字符。

空白和控制字符不是可见字符。

StringUtil::isPrintable($s)

确定一个字符串中的所有字符是否都有可打印的输出。

控制字符没有可打印的输出。

StringUtil::isPunctuation($s)

确定一个字符串中的所有字符是否都是标点符号。

StringUtil::isWhitespace($s)

确定一个字符串中的所有字符是否都是空白字符。

StringUtil::count($s, $substr, $offset = 0, $length = null)

计算一个字符串中包含子字符串的次数。

不包括重叠。

StringUtil::characterRun($s, $chars, $begin = 0, $end = null)

计算字符串开头匹配的字符数量。

确定字符串初始段(只包含 $chars 列出的字符)的长度。

StringUtil::escapeCString($s)

以 C 风格转义字符串。

通过在特定字符前添加反斜杠并使用八进制代码编码不可打印字符来转义字符串,就像在 C 字符串字面量中一样。

StringUtil::unescapeCString($s)

取消转义 C 风格字符串字面量的内容。

StringUtil::escapePhpString($s)

以 PHP 风格转义字符串。

按照 PHP 所需在特殊字符前放置反斜杠来转义字符串。

StringUtil::unescapeBackslashes($s)

从一个字符串中移除所有反斜杠(\)转义字符。

注意,这不会将 \n 解释为换行符,\t 解释为制表符等,而是作为字面字符 nt 等。

StringUtil::parseInt($s, $base = null)

根据指定的基数解析字符串为整数。

如果 $basenull,则基数从字符串的前缀推断出来(十六进制为 0x,八进制为 0,其余为十进制)。忽略任何无效的后缀字符。

StringUtil::parseReal($s)

解析浮点值。

StringUtil::encodeHex($s)

将二进制字符串转换为十六进制字符串。

StringUtil::decodeHex($s)

将十六进制字符串解析为二进制数据。

StringUtil::encodeBase64($s)

以 64 基数编码二进制字符串。

StringUtil::decodeBase64($s)

将 base 64 字符串解码为二进制。

StringUtil::fromAscii($n)

将 ASCII 代码点转换为相应的字符。

StringUtil::chr($n)

fromAscii 的别名。

请参阅 \Jitsu\StringUtil::fromAscii()

StringUtil::toAscii($c)

将字符转换为它的 ASCII 代码点。

StringUtil::ord($c)

toAscii 的别名。

请参阅 \Jitsu\StringUtil::toAscii()

StringUtil::byteCounts($s)

统计字符串中 256 个可能的字节值的出现次数。

StringUtil::unique($s)

列出字符串中的所有唯一字节值。

StringUtil::unusedBytes($s)

列出字符串中没有出现的所有字节值。

StringUtil::encodeHtml($s, $noquote = false)

使用字符实体转义特殊 HTML 字符。

StringUtil::escapeHtml($s, $noquote = false)

encodeHtml 的别名。

请参阅 \Jitsu\StringUtil::encodeHtml()

StringUtil::unencodeHtml($s)

encodeHtml 的逆操作。

在这里使用“unencode”一词而不是“decode”,是为了强调该函数不适合解码任意 HTML 文本,而是仅适合由 encodeHtml 使用最小集合的命名字符实体代码编码的 HTML。该函数不识别除由 encodeHtml 编码的命名实体以及 ' 之外的其他命名实体。它将解码数字实体,除非它们对应于不可打印的字符,这些字符将被保留为编码状态。

StringUtil::encodeHtmlDict($noquote = false)

生成用于使用 HTML5 字符实体转义特殊 HTML 字符的最小替换字典。

StringUtil::encodeHtmlEntities($s)

尽可能将字符串中的字符替换为其等效的 HTML5 命名字符实体。

此功能并不特别有用,应优先考虑 encodeHTML 以提高效率。

StringUtil::encodeHtmlEntitiesDict()

生成(相当大)的替换字典,尽可能将字符编码为命名的HTML5字符实体。

StringUtil::stripTags($s)

从一个字符串中去除HTML和PHP标签。

StringUtil::parseRawQueryString($s)

对查询字符串进行URL解码并解析。

注意,这假设参数名称以[]结尾以表示值的数组;在参数名称相同的情况下,只包含最后一个。

此外,这会自动对查询字符串进行URL解码;如果字符串未进行URL编码,则使用此方法是不正确的。

StringUtil::encodeStandardQueryString($data, $sep = '&')

将数据格式化和URL编码为查询字符串。

这遵循不将空格编码为+的标准。

出于兼容性原因,应优先使用encodeQueryString。请参阅\Jitsu\StringUtil::encodeQueryString()

StringUtil::encodeQueryString($data, $sep = '&')

将数据格式化和URL编码为查询字符串,将空格编码为+

StringUtil::encodeStandardUrl($s)

对字符串进行URL编码。

这遵循不将空格编码为+的标准。

出于兼容性原因,应优先使用encodeUrl。请参阅\Jitsu\StringUtil::encodeUrl()

StringUtil::decodeStandardUrl($s)

解码一个URL编码的字符串。

这遵循不将空格编码为+的标准。

出于兼容性原因,应优先使用decodeUrl。请参阅\Jitsu\StringUtil::decodeUrl()

StringUtil::encodeUrl($s)

使用+对空格进行编码,对字符串进行URL编码。

StringUtil::decodeUrl($s)

解码一个URL编码的字符串,将+视为空格。

StringUtil::parseCsv($s, $delim = ',', $quote = '"', $escape = '\\')

将CSV行解析为数组。

StringUtil::md5($s)

将字符串的MD5散列计算为一个16字节的二进制字符串。

StringUtil::md5Hex($s)

将字符串的MD5散列计算为一个十六进制字符串。

StringUtil::sha1($s)

将字符串的SHA1散列计算为一个20字节的二进制字符串。

StringUtil::sha1Hex($s)

将字符串的SHA1散列计算为一个十六进制字符串。

StringUtil::rot13($s)

对一个字符串应用rot13加密。

StringUtil::shuffle($s)

随机打乱一个字符串中的字符。

StringUtil::formatMoney($amount)

使用当前区域设置将数字格式化为货币值。

注意,这需要使用setlocale(LC_ALL, $locale)setlocale(LC_MONETARY, $locale)设置区域设置,对于系统上已安装的区域。

StringUtil::formatNumber($number, $decimals = 0, $decimal_point = '.', $thousands_sep = ',')

使用逗号和十进制点格式化数字。

StringUtil::levenshtein($s1, $s2, $ins = null, $repl = null, $del = null)

计算两个字符串之间的Levenshtein距离。

Levenshtein距离是将$s1转换为$s2所需的字符替换、插入和删除的最小数量。

StringUtil::splitCamelCase($s)

将驼峰式字符串分割为其组件。

连续的大写字母被视为首字母缩写词,并相应地分组。

例如,字符串"XMLHttpRequest"将被分割为"XML"、"Http"、"Request"。

StringUtil::pluralize($s)

将英语单词转换为复数或"-s"形式。

可以使用此功能形成名词的复数形式或动词的第三人称单数形式。

这使用了一个简单的算法,它不适用于不规则形式和某些其他情况。然而,它足够智能,可以将常见的结尾如"-y"转换为"-ies","-s"转换为"-ses"等等。

StringUtil::capture($callback)

捕获回调中打印的所有输出。

使用PHP输出缓冲区捕获回调中所有echo的输出。如果回调抛出异常,则忽略输出,并重新抛出异常。