ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 字符串处理 字符串处理 - Nette \ Utils \字符串 Nette \ Utils \ Strings是一个静态类,它包含许多用于处理UTF-8编码字符串的有用函数。 所有示例假定定义了以下类别名: ~~~ use Nette\Utils\Strings; ~~~ ## 大小写 lower($s) 将UTF-8字符串的所有字符转换为小写。 ~~~ echo Strings::lower('Hello world'); // hello world ~~~ upper($s) 将UTF-8字符串的所有字符转换为大写。 ~~~ echo Strings::upper('Hello world'); // HELLO WORLD ~~~ firstUpper($s) 将UTF-8字符串的第一个字符转换为大写,并保留其他字符不变。 ~~~ echo Strings::firstUpper('hello world'); // Hello world ~~~ capitalize($s) 将UTF-8字符串的每个单词的第一个字符转换为大写,将其他字符转换为小写。 ~~~ echo Strings::capitalize('Hello world'); // Hello World ~~~ ## 编辑字符串 normalize($s) 删除右侧空格,控制序列,并将行尾合并为\ n。 webalize($s, $charlist=NULL, $lower=TRUE) 调整用于URL中的UTF-8字符串,即删除所有重音符,并替换除英文字母字母和数字以外的所有其余字符。 ~~~ echo Strings::webalize('žluťoučký kůň'); // zlutoucky-kun ~~~ 其他字符也可以保留,但必须作为第二个参数传递。 ~~~ echo Strings::webalize('10. image_id', '._'); // 10.-image_id ~~~ 第三个参数可以禁止将字符串转换为小写。 ~~~ echo Strings::webalize('Hello world', NULL, FALSE); // Hello-world ~~~ trim($s, $charlist=NULL) 从UTF-8编码的字符串中删除所有左侧和右侧空格(或作为第二个参数传递的字符)。 ~~~ echo Strings::trim(' Hello '); // 'Hello' ~~~ truncate($s, $maxLen, $append='…') 截断UTF-8字符串给定最大长度,同时尝试不分割整个单词。 只有当字符串被截断时,省略号(或者用第三个参数设置的其他内容)被附加到字符串。 ~~~ $text = 'Hello, how are you today?'; echo Strings::truncate($text, 5); // 'Hell…' echo Strings::truncate($text, 20); // 'Hello, how are you…' echo Strings::truncate($text, 30); // 'Hello, how are you today?' echo Strings::truncate($text, 20, '~'); // 'Hello, how are you~' ~~~ indent($s, $level=1, $indentationChar="\t") 从左侧缩进多行文本。 第二个参数设置应该使用多少个缩进字符,而缩进本身是第三个参数(默认为制表符)。 ~~~ echo Strings::indent('Nette'); // ' Nette' echo Strings::indent('Nette', 2, '+'); // '++Nette' ~~~ padLeft($s, $length, $pad=' ') 通过在开始处添加$ pad字符串,将UTF-8字符串填充到给定的长度。 ~~~ echo Strings::padLeft('Nette', 6); // ' Nette' echo Strings::padLeft('Nette', 8, '+'); // '+++Nette' echo Strings::padLeft(' Nette', 11, 'WOW'); // 'WOWWO Nette' ~~~ padRight($s, $length, $pad=' ') 通过将$ pad字符串附加到末尾,将UTF-8字符串添加到给定的长度。 ~~~ echo Strings::padRight('Nette', 6); // 'Nette ' echo Strings::padRight('Nette', 8, '+'); // 'Nette+++' echo Strings::padRight('Nette is ', 16, 'great'); // 'Nette is greatgr' ~~~ fixEncoding($s) 从字符串中删除所有无效的UTF-8字符。 ~~~ $correctStrings = Strings::fixEncoding($string); ~~~ bool checkEncoding($s) 检查字符串是否对UTF-8编码有效。 ~~~ $isUtf8 = Strings::checkEncoding($string); ~~~ int length($s) 返回UTF-8字符串的长度。 ~~~ echo Strings::length('Nette'); // '5' echo Strings::length('červená'); // '7' ~~~ bool startsWith($haystack, $needle) 如果$ haystack字符串以$ needle开头,则返回TRUE。 ~~~ $haystack = 'Begins'; $needle = 'Be'; Strings::startsWith($haystack, $needle); // TRUE ~~~ bool endsWith($haystack, $needle) 如果$ haystack string以$ needle结束,则返回TRUE。 ~~~ $haystack = 'Ends'; $needle = 'ds'; Strings::endsWith($haystack, $needle); // TRUE ~~~ bool contains($haystack, $needle) 如果$ haystack string包含$ needle,则返回TRUE。 ~~~ $haystack = 'Contains'; $needle = 'tai'; Strings::contains($haystack, $needle); // TRUE ~~~ bool compare($left, $right, $len=NULL) 比较两个UTF-8字符串或其部分,不考虑字符大小写。 如果$ len大于零,则比较从字符串开头开始的相应字符数量,如果为负,则比较从结束开始的相应字符数量,如果其等于零,则比较整个字符串。 ~~~ echo Strings::compare('Nette', 'nette'); // TRUE echo Strings::compare('Nette', 'next', 2); // TRUE - two first characters match echo Strings::compare('Nette', 'Latte', -2); // TRUE - two last characters match ~~~ chr($code) 返回UTF-8中的特定字符。 ~~~ echo Strings::chr(0xA9); // creates '©' ~~~ ## 生成字符串 random($length=10, $charlist='0-9a-z') 从第二个参数中指定的字符生成给定长度的随机字符串。 支持间隔,例如0-9或A-Z。 ~~~ echo Strings::random(); // '6zq3a1nl8n' echo Strings::random(5, 'A-Z'); // 'HLKUR' ~~~ ## 正则表达式 Strings类包含几个使用正则表达式的方法。 与本地PHP函数不同,它提供可读的API,并且如果发生任何regexp错误,则抛出Nette \ RegexpException。 array split($subject, $pattern, $flags=NULL) 通过正则表达式将字符串拆分为数组。 参数$ flag与preg_split具有相同的参数,但默认情况下设置为PREG_SPLIT_DELIM_CAPTURE。 ~~~ $res = Strings::split('One, two,three', '~,\s*~'); // ['One', 'two', 'three'] $res = Strings::split('One, two,three', '~(,)\s*~'); // ['One', ',', 'two', ',', 'three'] ~~~ array match($subject, $pattern, $flags=NULL, $offset=0) 检查给定的字符串是否匹配正则表达式模式,并返回具有第一个找到的匹配和每个子模式的数组。 参数$ flag与函数preg_match拥有相同的参数 ~~~ list($res) = Strings::match('One, two,three', '~[a-z]+~i'); // 'One' list($res) = Strings::match('One, two,three', '~\d+~'); // NULL ~~~ array matchAll($subject, $pattern, $flags=NULL, $offset=0) 查找与正则表达式模式匹配的所有匹配项,并返回一个二维数组。 参数$ flag与函数preg_match_all具有相同的参数,但默认情况下设置了PREG_SET_ORDER。 ~~~ $res = Strings::matchAll('One, two,tree', '~[a-z]+~i'); /* [ 0 => ['One'], 1 => ['two'], 2 => ['three'], ] */ $res = Strings::matchAll('One, two,three', '~\d+~'); // [] ~~~ replace($subject, $pattern, $replacement=NULL, $limit=-1) 替换与正则表达式匹配的所有匹配项,作为第二个参数传递。 虽然它可能是一个哈希映射在pattern =>替换格式。 第三个参数是替换字符串或回调,第四个参数限制替换计数。 ~~~ echo Strings::replace('One, two,three', '~[a-z]+~i', '*'); // '*, *,*' echo Strings::replace('One, two,three', [ '~[a-z]+~i' => '*', '~\s+~' => '+', ]); // '*,+*,*' echo Strings::replace('One, two,three', '~[a-z]+~i', function ($m) { return strrev($m[0]); }); // 'enO, owt,eerht' ~~~