字符串
简介
Laravel 包含多种用于操作字符串值的函数。框架本身也广泛使用了这些函数;不过,如果你觉得方便,也可以在自己的应用程序中自由使用它们。
可用方法
字符串
__ class_basename e preg_replace_array Str::after Str::afterLast Str::apa Str::ascii Str::before Str::beforeLast Str::between Str::betweenFirst Str::camel Str::charAt Str::chopStart Str::chopEnd Str::contains Str::containsAll Str::doesntContain Str::doesntEndWith Str::doesntStartWith Str::deduplicate Str::endsWith Str::excerpt Str::finish Str::fromBase64 Str::headline Str::initials Str::inlineMarkdown Str::is Str::isAscii Str::isJson Str::isUlid Str::isUrl Str::isUuid Str::kebab Str::lcfirst Str::length Str::limit Str::lower Str::markdown Str::mask Str::match Str::matchAll Str::isMatch Str::orderedUuid Str::padBoth Str::padLeft Str::padRight Str::password Str::plural Str::pluralStudly Str::position Str::random Str::remove Str::repeat Str::replace Str::replaceArray Str::replaceFirst Str::replaceLast Str::replaceMatches Str::replaceStart Str::replaceEnd Str::reverse Str::singular Str::slug Str::snake Str::squish Str::start Str::startsWith Str::studly Str::substr Str::substrCount Str::substrReplace Str::swap Str::take Str::title Str::toBase64 Str::transliterate Str::trim Str::ltrim Str::rtrim Str::ucfirst Str::ucsplit Str::ucwords Str::upper Str::ulid Str::unwrap Str::uuid Str::uuid7 Str::wordCount Str::wordWrap Str::words Str::wrap str trans trans_choice
流式字符串 (Fluent Strings)
after afterLast apa append ascii basename before beforeLast between betweenFirst camel charAt classBasename chopStart chopEnd contains containsAll decrypt deduplicate dirname doesntContain doesntEndWith doesntStartWith encrypt endsWith exactly excerpt explode finish fromBase64 hash headline initials inlineMarkdown is isAscii isEmpty isNotEmpty isJson isUlid isUrl isUuid kebab lcfirst length limit lower markdown mask match matchAll isMatch newLine padBoth padLeft padRight pipe plural position prepend remove repeat replace replaceArray replaceFirst replaceLast replaceMatches replaceStart replaceEnd scan singular slug snake split squish start startsWith stripTags studly substr substrReplace swap take tap test title toBase64 toHtmlString toUri transliterate trim ltrim rtrim ucfirst ucsplit ucwords unwrap upper when whenContains whenContainsAll whenDoesntEndWith whenDoesntStartWith whenEmpty whenNotEmpty whenStartsWith whenEndsWith whenExactly whenNotExactly whenIs whenIsAscii whenIsUlid whenIsUuid whenTest wordCount words wrap
字符串
__()
__ 函数使用你的语言文件来翻译指定的翻译字符串或翻译键。
1echo __('Welcome to our application');2 3echo __('messages.welcome');
如果指定的翻译字符串或键不存在,__ 函数将返回该值本身。因此,使用上面的例子,如果翻译键不存在,__ 函数会返回 messages.welcome。
class_basename()
class_basename 函数返回指定类的类名,并去除命名空间。
1$class = class_basename('Foo\Bar\Baz');2 3// Baz
e()
e 函数运行 PHP 的 htmlspecialchars 函数,默认将 double_encode 选项设置为 true。
1echo e('<html>foo</html>');2 3// <html>foo</html>
preg_replace_array()
preg_replace_array 函数使用数组顺序替换字符串中的给定模式。
1$string = 'The event will take place between :start and :end';2 3$replaced = preg_replace_array('/:[a-z_]+/', ['8:30', '9:00'], $string);4 5// The event will take place between 8:30 and 9:00
Str::after()
Str::after 方法返回字符串中给定值之后的所有内容。如果该值在字符串中不存在,则返回整个字符串。
1use Illuminate\Support\Str;2 3$slice = Str::after('This is my name', 'This is');4 5// ' my name'
Str::afterLast()
Str::afterLast 方法返回字符串中给定值最后一次出现之后的所有内容。如果该值在字符串中不存在,则返回整个字符串。
1use Illuminate\Support\Str;2 3$slice = Str::afterLast('App\Http\Controllers\Controller', '\\');4 5// 'Controller'
Str::apa()
Str::apa 方法根据 APA 指南将给定的字符串转换为标题格式 (title case)。
1use Illuminate\Support\Str;2 3$title = Str::apa('Creating A Project');4 5// 'Creating a Project'
Str::ascii()
Str::ascii 方法将尝试把字符串转写 (transliterate) 为 ASCII 值。
1use Illuminate\Support\Str;2 3$slice = Str::ascii('û');4 5// 'u'
Str::before()
Str::before 方法返回字符串中给定值之前的所有内容。
1use Illuminate\Support\Str;2 3$slice = Str::before('This is my name', 'my name');4 5// 'This is '
Str::beforeLast()
Str::beforeLast 方法返回字符串中给定值最后一次出现之前的所有内容。
1use Illuminate\Support\Str;2 3$slice = Str::beforeLast('This is my name', 'is');4 5// 'This '
Str::between()
Str::between 方法返回两个值之间的字符串部分。
1use Illuminate\Support\Str;2 3$slice = Str::between('This is my name', 'This', 'name');4 5// ' is my '
Str::betweenFirst()
Str::betweenFirst 方法返回两个值之间可能的最短字符串部分。
1use Illuminate\Support\Str;2 3$slice = Str::betweenFirst('[a] bc [d]', '[', ']');4 5// 'a'
Str::camel()
Str::camel 方法将给定的字符串转换为 camelCase(驼峰命名)。
1use Illuminate\Support\Str;2 3$converted = Str::camel('foo_bar');4 5// 'fooBar'
Str::charAt()
Str::charAt 方法返回指定索引处的字符。如果索引越界,则返回 false。
1use Illuminate\Support\Str;2 3$character = Str::charAt('This is my name.', 6);4 5// 's'
Str::chopStart()
Str::chopStart 方法仅在给定值出现在字符串开头时,移除第一次出现的该值。
1use Illuminate\Support\Str;2 3$url = Str::chopStart('https://laravel.net.cn', 'https://');4 5// 'laravel.com'
你也可以传入一个数组作为第二个参数。如果字符串以数组中的任何值开头,那么该值将从字符串中移除。
1use Illuminate\Support\Str;2 3$url = Str::chopStart('https://laravel.net.cn', ['https://', 'http://']);4 5// 'laravel.com'
Str::chopEnd()
Str::chopEnd 方法仅在给定值出现在字符串结尾时,移除最后一次出现的该值。
1use Illuminate\Support\Str;2 3$url = Str::chopEnd('app/Models/Photograph.php', '.php');4 5// 'app/Models/Photograph'
你也可以传入一个数组作为第二个参数。如果字符串以数组中的任何值结尾,那么该值将从字符串中移除。
1use Illuminate\Support\Str;2 3$url = Str::chopEnd('laravel.com/index.php', ['/index.html', '/index.php']);4 5// 'laravel.com'
Str::contains()
Str::contains 方法确定字符串是否包含给定的值。默认情况下,该方法区分大小写。
1use Illuminate\Support\Str;2 3$contains = Str::contains('This is my name', 'my');4 5// true
你也可以传入一个数组来确定字符串是否包含数组中的任何值。
1use Illuminate\Support\Str;2 3$contains = Str::contains('This is my name', ['my', 'foo']);4 5// true
你可以通过将 ignoreCase 参数设置为 true 来禁用大小写敏感性。
1use Illuminate\Support\Str;2 3$contains = Str::contains('This is my name', 'MY', ignoreCase: true);4 5// true
Str::containsAll()
Str::containsAll 方法确定字符串是否包含给定数组中的所有值。
1use Illuminate\Support\Str;2 3$containsAll = Str::containsAll('This is my name', ['my', 'name']);4 5// true
你可以通过将 ignoreCase 参数设置为 true 来禁用大小写敏感性。
1use Illuminate\Support\Str;2 3$containsAll = Str::containsAll('This is my name', ['MY', 'NAME'], ignoreCase: true);4 5// true
Str::doesntContain()
Str::doesntContain 方法确定字符串是否不包含给定的值。默认情况下,该方法区分大小写。
1use Illuminate\Support\Str;2 3$doesntContain = Str::doesntContain('This is name', 'my');4 5// true
你也可以传入一个值数组,以确定字符串是否不包含数组中的任何值。
1use Illuminate\Support\Str;2 3$doesntContain = Str::doesntContain('This is name', ['my', 'framework']);4 5// true
你可以通过将 ignoreCase 参数设置为 true 来禁用大小写敏感性。
1use Illuminate\Support\Str;2 3$doesntContain = Str::doesntContain('This is name', 'MY', ignoreCase: true);4 5// true
Str::deduplicate()
Str::deduplicate 方法将字符串中连续重复的字符替换为单个字符。默认情况下,该方法对空格进行去重。
1use Illuminate\Support\Str;2 3$result = Str::deduplicate('The Laravel Framework');4 5// The Laravel Framework
你可以通过将要去重的字符作为第二个参数传递给该方法来指定不同的字符。
1use Illuminate\Support\Str;2 3$result = Str::deduplicate('The---Laravel---Framework', '-');4 5// The-Laravel-Framework
Str::doesntEndWith()
Str::doesntEndWith 方法确定给定字符串是否不以给定值结尾。
1use Illuminate\Support\Str;2 3$result = Str::doesntEndWith('This is my name', 'dog');4 5// true
你也可以传入一个值数组来确定字符串是否不以数组中的任何值结尾。
1use Illuminate\Support\Str;2 3$result = Str::doesntEndWith('This is my name', ['this', 'foo']);4 5// true6 7$result = Str::doesntEndWith('This is my name', ['name', 'foo']);8 9// false
Str::doesntStartWith()
Str::doesntStartWith 方法确定给定字符串是否不以给定值开头。
1use Illuminate\Support\Str;2 3$result = Str::doesntStartWith('This is my name', 'That');4 5// true
如果传入一个可能的候选值数组,且字符串不以任何给定值开头,doesntStartWith 方法将返回 true。
1$result = Str::doesntStartWith('This is my name', ['What', 'That', 'There']);2 3// true
Str::endsWith()
Str::endsWith 方法确定给定字符串是否以给定值结尾。
1use Illuminate\Support\Str;2 3$result = Str::endsWith('This is my name', 'name');4 5// true
你也可以传入一个值数组来确定字符串是否以数组中的任何值结尾。
1use Illuminate\Support\Str;2 3$result = Str::endsWith('This is my name', ['name', 'foo']);4 5// true6 7$result = Str::endsWith('This is my name', ['this', 'foo']);8 9// false
Str::excerpt()
Str::excerpt 方法从字符串中提取与短语首次出现位置相匹配的摘录。
1use Illuminate\Support\Str;2 3$excerpt = Str::excerpt('This is my name', 'my', [4 'radius' => 35]);6 7// '...is my na...'
radius 选项(默认为 100)允许你定义截断字符串每一侧应显示的字符数。
此外,你可以使用 omission 选项来定义在截断字符串前后添加的字符串。
1use Illuminate\Support\Str;2 3$excerpt = Str::excerpt('This is my name', 'name', [4 'radius' => 3,5 'omission' => '(...) '6]);7 8// '(...) my name'
Str::finish()
Str::finish 方法在字符串不以给定值结尾时,在字符串末尾添加一个该值。
1use Illuminate\Support\Str;2 3$adjusted = Str::finish('this/string', '/');4 5// this/string/6 7$adjusted = Str::finish('this/string/', '/');8 9// this/string/
Str::fromBase64()
Str::fromBase64 方法对给定的 Base64 字符串进行解码。
1use Illuminate\Support\Str;2 3$decoded = Str::fromBase64('TGFyYXZlbA==');4 5// Laravel
Str::headline()
Str::headline 方法将由大小写、连字符或下划线分隔的字符串转换为以空格分隔的字符串,并将每个单词的首字母大写。
1use Illuminate\Support\Str;2 3$headline = Str::headline('steve_jobs');4 5// Steve Jobs6 7$headline = Str::headline('EmailNotificationSent');8 9// Email Notification Sent
Str::initials()
Str::initials 方法将返回给定字符串的首字母缩写,并可选择将其大写。
1use Illuminate\Support\Str;2 3$initials = Str::initials('taylor otwell');4 5// to6 7$initials = Str::initials('taylor otwell', capitalize: true);8 9// TO
Str::inlineMarkdown()
Str::inlineMarkdown 方法使用 CommonMark 将 GitHub 风格的 Markdown 转换为内联 HTML。但与 markdown 方法不同的是,它不会将生成的 HTML 包裹在块级元素中。
1use Illuminate\Support\Str;2 3$html = Str::inlineMarkdown('**Laravel**');4 5// <strong>Laravel</strong>
Markdown 安全性
默认情况下,Markdown 支持原生 HTML,在处理未经处理的用户输入时可能会暴露跨站脚本攻击 (XSS) 漏洞。根据 CommonMark 安全文档,你可以使用 html_input 选项来转义或剥离原生 HTML,并使用 allow_unsafe_links 选项来指定是否允许不安全的链接。如果你需要允许某些原生 HTML,你应该通过 HTML Purifier 对编译后的 Markdown 进行过滤。
1use Illuminate\Support\Str;2 3Str::inlineMarkdown('Inject: <script>alert("Hello XSS!");</script>', [4 'html_input' => 'strip',5 'allow_unsafe_links' => false,6]);7 8// Inject: alert("Hello XSS!");
Str::is()
Str::is 方法确定给定字符串是否匹配指定的模式。星号 (*) 可用作通配符。
1use Illuminate\Support\Str;2 3$matches = Str::is('foo*', 'foobar');4 5// true6 7$matches = Str::is('baz*', 'foobar');8 9// false
你可以通过将 ignoreCase 参数设置为 true 来禁用大小写敏感性。
1use Illuminate\Support\Str;2 3$matches = Str::is('*.jpg', 'photo.JPG', ignoreCase: true);4 5// true
Str::isAscii()
Str::isAscii 方法确定给定字符串是否为 7 位 ASCII 编码。
1use Illuminate\Support\Str;2 3$isAscii = Str::isAscii('Taylor');4 5// true6 7$isAscii = Str::isAscii('ü');8 9// false
Str::isJson()
Str::isJson 方法确定给定字符串是否为有效的 JSON。
1use Illuminate\Support\Str; 2 3$result = Str::isJson('[1,2,3]'); 4 5// true 6 7$result = Str::isJson('{"first": "John", "last": "Doe"}'); 8 9// true10 11$result = Str::isJson('{first: "John", last: "Doe"}');12 13// false
Str::isUrl()
Str::isUrl 方法确定给定字符串是否为有效的 URL。
1use Illuminate\Support\Str;2 3$isUrl = Str::isUrl('http://example.com');4 5// true6 7$isUrl = Str::isUrl('laravel');8 9// false
isUrl 方法支持多种协议。你可以通过向 isUrl 方法提供协议列表来指定哪些协议应被视为有效。
1$isUrl = Str::isUrl('http://example.com', ['http', 'https']);
Str::isUlid()
Str::isUlid 方法确定给定字符串是否为有效的 ULID。
1use Illuminate\Support\Str;2 3$isUlid = Str::isUlid('01gd6r360bp37zj17nxb55yv40');4 5// true6 7$isUlid = Str::isUlid('laravel');8 9// false
Str::isUuid()
Str::isUuid 方法确定给定字符串是否为有效的 UUID。
1use Illuminate\Support\Str;2 3$isUuid = Str::isUuid('a0a2a2d2-0b87-4a18-83f2-2529882be2de');4 5// true6 7$isUuid = Str::isUuid('laravel');8 9// false
你还可以按版本(1, 3, 4, 5, 6, 7 或 8)验证给定 UUID 是否符合 UUID 规范。
1use Illuminate\Support\Str;2 3$isUuid = Str::isUuid('a0a2a2d2-0b87-4a18-83f2-2529882be2de', version: 4);4 5// true6 7$isUuid = Str::isUuid('a0a2a2d2-0b87-4a18-83f2-2529882be2de', version: 1);8 9// false
Str::kebab()
Str::kebab 方法将给定字符串转换为 kebab-case(短横线分隔)。
1use Illuminate\Support\Str;2 3$converted = Str::kebab('fooBar');4 5// foo-bar
Str::lcfirst()
Str::lcfirst 方法返回首字母小写后的字符串。
1use Illuminate\Support\Str;2 3$string = Str::lcfirst('Foo Bar');4 5// foo Bar
Str::length()
Str::length 方法返回给定字符串的长度。
1use Illuminate\Support\Str;2 3$length = Str::length('Laravel');4 5// 7
Str::limit()
Str::limit 方法将给定字符串截断为指定长度。
1use Illuminate\Support\Str;2 3$truncated = Str::limit('The quick brown fox jumps over the lazy dog', 20);4 5// The quick brown fox...
你可以向方法传递第三个参数来更改追加到截断字符串末尾的内容。
1$truncated = Str::limit('The quick brown fox jumps over the lazy dog', 20, ' (...)');2 3// The quick brown fox (...)
如果你想在截断字符串时保留完整的单词,可以使用 preserveWords 参数。当此参数为 true 时,字符串将被截断到最近的完整单词边界。
1$truncated = Str::limit('The quick brown fox', 12, preserveWords: true);2 3// The quick...
Str::lower()
Str::lower 方法将给定字符串转换为小写。
1use Illuminate\Support\Str;2 3$converted = Str::lower('LARAVEL');4 5// laravel
Str::markdown()
Str::markdown 方法使用 CommonMark 将 GitHub 风格的 Markdown 转换为 HTML。
1use Illuminate\Support\Str; 2 3$html = Str::markdown('# Laravel'); 4 5// <h1>Laravel</h1> 6 7$html = Str::markdown('# Taylor <b>Otwell</b>', [ 8 'html_input' => 'strip', 9]);10 11// <h1>Taylor Otwell</h1>
Markdown 安全性
默认情况下,Markdown 支持原生 HTML,在处理未经处理的用户输入时可能会暴露跨站脚本攻击 (XSS) 漏洞。根据 CommonMark 安全文档,你可以使用 html_input 选项来转义或剥离原生 HTML,并使用 allow_unsafe_links 选项来指定是否允许不安全的链接。如果你需要允许某些原生 HTML,你应该通过 HTML Purifier 对编译后的 Markdown 进行过滤。
1use Illuminate\Support\Str;2 3Str::markdown('Inject: <script>alert("Hello XSS!");</script>', [4 'html_input' => 'strip',5 'allow_unsafe_links' => false,6]);7 8// <p>Inject: alert("Hello XSS!");</p>
Str::mask()
Str::mask 方法用重复字符屏蔽字符串的一部分,可用于混淆电子邮件地址和电话号码等字符串片段。
1use Illuminate\Support\Str;2 4 5// tay***************
如有需要,你可以提供一个负数作为 mask 方法的第三个参数,这将指示方法从字符串末尾的指定距离处开始屏蔽。
2 3// tay***@example.com
Str::match()
Str::match 方法返回字符串中匹配给定正则表达式模式的部分。
1use Illuminate\Support\Str;2 3$result = Str::match('/bar/', 'foo bar');4 5// 'bar'6 7$result = Str::match('/foo (.*)/', 'foo bar');8 9// 'bar'
Str::matchAll()
Str::matchAll 方法返回一个集合,其中包含字符串中与给定正则表达式匹配的所有部分。
1use Illuminate\Support\Str;2 3$result = Str::matchAll('/bar/', 'bar foo bar');4 5// collect(['bar', 'bar'])
如果在表达式中指定了匹配组,Laravel 将返回包含第一个匹配组结果的集合。
1use Illuminate\Support\Str;2 3$result = Str::matchAll('/f(\w*)/', 'bar fun bar fly');4 5// collect(['un', 'ly']);
如果没有找到匹配项,将返回一个空集合。
Str::isMatch()
如果字符串匹配给定的正则表达式,Str::isMatch 方法将返回 true。
1use Illuminate\Support\Str;2 3$result = Str::isMatch('/foo (.*)/', 'foo bar');4 5// true6 7$result = Str::isMatch('/foo (.*)/', 'laravel');8 9// false
Str::orderedUuid()
Str::orderedUuid 方法生成一个“时间戳在前”的 UUID,可高效存储在索引数据库列中。使用此方法生成的每个 UUID 将排在之前生成的 UUID 之后。
1use Illuminate\Support\Str;2 3return (string) Str::orderedUuid();
Str::padBoth()
Str::padBoth 方法包装了 PHP 的 str_pad 函数,在字符串两侧填充另一个字符串,直到达到指定长度。
1use Illuminate\Support\Str;2 3$padded = Str::padBoth('James', 10, '_');4 5// '__James___'6 7$padded = Str::padBoth('James', 10);8 9// ' James '
Str::padLeft()
Str::padLeft 方法包装了 PHP 的 str_pad 函数,在字符串左侧填充另一个字符串,直到达到指定长度。
1use Illuminate\Support\Str;2 3$padded = Str::padLeft('James', 10, '-=');4 5// '-=-=-James'6 7$padded = Str::padLeft('James', 10);8 9// ' James'
Str::padRight()
Str::padRight 方法包装了 PHP 的 str_pad 函数,在字符串右侧填充另一个字符串,直到达到指定长度。
1use Illuminate\Support\Str;2 3$padded = Str::padRight('James', 10, '-');4 5// 'James-----'6 7$padded = Str::padRight('James', 10);8 9// 'James '
Str::password()
Str::password 方法可用于生成指定长度的安全随机密码。密码由字母、数字、符号和空格组成。默认情况下,密码长度为 32 个字符。
1use Illuminate\Support\Str;2 3$password = Str::password();4 5// 'EbJo2vE-AS:U,$%_gkrV4n,q~1xy/-_4'6 7$password = Str::password(12);8 9// 'qwuar>#V|i]N'
Str::plural()
Str::plural 方法将单数词转换为复数形式。此函数支持 Laravel 复数化器支持的所有语言。
1use Illuminate\Support\Str;2 3$plural = Str::plural('car');4 5// cars6 7$plural = Str::plural('child');8 9// children
你可以提供一个整数作为第二个参数,以检索字符串的单数或复数形式。
1use Illuminate\Support\Str;2 3$plural = Str::plural('child', 2);4 5// children6 7$singular = Str::plural('child', 1);8 9// child
可以使用 prependCount 参数在复数化后的字符串前加上格式化后的 $count。
1use Illuminate\Support\Str;2 3$label = Str::plural('car', 1000, prependCount: true);4 5// 1,000 cars
Str::pluralStudly()
Str::pluralStudly 方法将 StudlyCase 格式的单数词转换为复数形式。此函数支持 Laravel 复数化器支持的所有语言。
1use Illuminate\Support\Str;2 3$plural = Str::pluralStudly('VerifiedHuman');4 5// VerifiedHumans6 7$plural = Str::pluralStudly('UserFeedback');8 9// UserFeedback
你可以提供一个整数作为第二个参数,以检索字符串的单数或复数形式。
1use Illuminate\Support\Str;2 3$plural = Str::pluralStudly('VerifiedHuman', 2);4 5// VerifiedHumans6 7$singular = Str::pluralStudly('VerifiedHuman', 1);8 9// VerifiedHuman
Str::position()
Str::position 方法返回子字符串在字符串中第一次出现的位置。如果子字符串不存在,则返回 false。
1use Illuminate\Support\Str;2 3$position = Str::position('Hello, World!', 'Hello');4 5// 06 7$position = Str::position('Hello, World!', 'W');8 9// 7
Str::random()
Str::random 方法生成指定长度的随机字符串。此函数使用 PHP 的 random_bytes 函数。
1use Illuminate\Support\Str;2 3$random = Str::random(40);
在测试期间,可能会需要“伪造” Str::random 方法的返回值。为此,你可以使用 createRandomStringsUsing 方法。
1Str::createRandomStringsUsing(function () {2 return 'fake-random-string';3});
要指示 random 方法恢复正常生成随机字符串,你可以调用 createRandomStringsNormally 方法。
1Str::createRandomStringsNormally();
Str::remove()
Str::remove 方法从字符串中移除给定值或值数组。
1use Illuminate\Support\Str;2 3$string = 'Peter Piper picked a peck of pickled peppers.';4 5$removed = Str::remove('e', $string);6 7// Ptr Pipr pickd a pck of pickld ppprs.
你也可以向 remove 方法传递 false 作为第三个参数,以在移除字符串时忽略大小写。
Str::repeat()
Str::repeat 方法重复给定的字符串。
1use Illuminate\Support\Str;2 3$string = 'a';4 5$repeat = Str::repeat($string, 5);6 7// aaaaa
Str::replace()
Str::replace 方法替换字符串中的给定内容。
1use Illuminate\Support\Str;2 3$string = 'Laravel 11.x';4 5$replaced = Str::replace('11.x', '12.x', $string);6 7// Laravel 12.x
replace 方法还接受一个 caseSensitive 参数。默认情况下,该方法区分大小写。
1$replaced = Str::replace(2 'php',3 'Laravel',4 'PHP Framework for Web Artisans',5 caseSensitive: false6);7 8// Laravel Framework for Web Artisans
Str::replaceArray()
Str::replaceArray 方法使用数组顺序替换字符串中的给定值。
1use Illuminate\Support\Str;2 3$string = 'The event will take place between ? and ?';4 5$replaced = Str::replaceArray('?', ['8:30', '9:00'], $string);6 7// The event will take place between 8:30 and 9:00
Str::replaceFirst()
Str::replaceFirst 方法替换字符串中第一次出现的给定值。
1use Illuminate\Support\Str;2 3$replaced = Str::replaceFirst('the', 'a', 'the quick brown fox jumps over the lazy dog');4 5// a quick brown fox jumps over the lazy dog
Str::replaceLast()
Str::replaceLast 方法替换字符串中最后一次出现的给定值。
1use Illuminate\Support\Str;2 3$replaced = Str::replaceLast('the', 'a', 'the quick brown fox jumps over the lazy dog');4 5// the quick brown fox jumps over a lazy dog
Str::replaceMatches()
Str::replaceMatches 方法将字符串中所有匹配给定正则表达式模式的部分替换为指定的替换字符串。
1use Illuminate\Support\Str;2 3$replaced = Str::replaceMatches(4 pattern: '/[^A-Za-z0-9]++/',5 replace: '',6 subject: '(+1) 501-555-1000'7)8 9// '15015551000'
replaceMatches 方法还接受一个闭包,该闭包会被传入匹配的部分,允许你在闭包内执行替换逻辑并返回替换后的值。
1use Illuminate\Support\Str;2 3$replaced = Str::replaceMatches('/\d/', function (array $matches) {4 return '['.$matches[0].']';5}, '123');6 7// '[1][2][3]'
Str::replaceStart()
Str::replaceStart 方法仅在给定值出现在字符串开头时,替换第一次出现的该值。
1use Illuminate\Support\Str;2 3$replaced = Str::replaceStart('Hello', 'Laravel', 'Hello World');4 5// Laravel World6 7$replaced = Str::replaceStart('World', 'Laravel', 'Hello World');8 9// Hello World
Str::replaceEnd()
Str::replaceEnd 方法仅在给定值出现在字符串结尾时,替换最后一次出现的该值。
1use Illuminate\Support\Str;2 3$replaced = Str::replaceEnd('World', 'Laravel', 'Hello World');4 5// Hello Laravel6 7$replaced = Str::replaceEnd('Hello', 'Laravel', 'Hello World');8 9// Hello World
Str::reverse()
Str::reverse 方法反转给定字符串。
1use Illuminate\Support\Str;2 3$reversed = Str::reverse('Hello World');4 5// dlroW olleH
Str::singular()
Str::singular 方法将字符串转换为单数形式。此函数支持 Laravel 复数化器支持的所有语言。
1use Illuminate\Support\Str;2 3$singular = Str::singular('cars');4 5// car6 7$singular = Str::singular('children');8 9// child
Str::slug()
Str::slug 方法从给定字符串生成 URL 友好的“slug”。
1use Illuminate\Support\Str;2 3$slug = Str::slug('Laravel 5 Framework', '-');4 5// laravel-5-framework
Str::snake()
Str::snake 方法将给定字符串转换为 snake_case(下划线分隔)。
1use Illuminate\Support\Str;2 3$converted = Str::snake('fooBar');4 5// foo_bar6 7$converted = Str::snake('fooBar', '-');8 9// foo-bar
Str::squish()
Str::squish 方法移除字符串中所有无关的空白,包括单词之间的多余空白。
1use Illuminate\Support\Str;2 3$string = Str::squish(' laravel framework ');4 5// laravel framework
Str::start()
Str::start 方法在字符串不以给定值开头时,在字符串开头添加一个该值。
1use Illuminate\Support\Str;2 3$adjusted = Str::start('this/string', '/');4 5// /this/string6 7$adjusted = Str::start('/this/string', '/');8 9// /this/string
Str::startsWith()
Str::startsWith 方法确定给定字符串是否以给定值开头。
1use Illuminate\Support\Str;2 3$result = Str::startsWith('This is my name', 'This');4 5// true
如果传入一个可能的候选值数组,且字符串以数组中的任何值开头,startsWith 方法将返回 true。
1$result = Str::startsWith('This is my name', ['This', 'That', 'There']);2 3// true
Str::studly()
Str::studly 方法将给定字符串转换为 StudlyCase(大驼峰命名)。
1use Illuminate\Support\Str;2 3$converted = Str::studly('foo_bar');4 5// FooBar
Str::substr()
Str::substr 方法返回由起始和长度参数指定的字符串部分。
1use Illuminate\Support\Str;2 3$converted = Str::substr('The Laravel Framework', 4, 7);4 5// Laravel
Str::substrCount()
Str::substrCount 方法返回给定值在给定字符串中出现的次数。
1use Illuminate\Support\Str;2 3$count = Str::substrCount('If you like ice cream, you will like snow cones.', 'like');4 5// 2
Str::substrReplace()
Str::substrReplace 方法替换字符串中指定位置的部分文本,从第三个参数指定的位置开始,替换第四个参数指定长度的字符。将 0 传递给该方法的第四个参数将会在指定位置插入字符串而不替换任何现有字符。
1use Illuminate\Support\Str;2 3$result = Str::substrReplace('1300', ':', 2);4// 13:5 6$result = Str::substrReplace('1300', ':', 2, 0);7// 13:00
Str::swap()
Str::swap 方法使用 PHP 的 strtr 函数替换字符串中的多个值。
1use Illuminate\Support\Str;2 3$string = Str::swap([4 'Tacos' => 'Burritos',5 'great' => 'fantastic',6], 'Tacos are great!');7 8// Burritos are fantastic!
Str::take()
Str::take 方法返回字符串开头指定数量的字符。
1use Illuminate\Support\Str;2 3$taken = Str::take('Build something amazing!', 5);4 5// Build
Str::title()
Str::title 方法将给定字符串转换为 Title Case。
1use Illuminate\Support\Str;2 3$converted = Str::title('a nice title uses the correct case');4 5// A Nice Title Uses The Correct Case
Str::toBase64()
Str::toBase64 方法将给定字符串转换为 Base64。
1use Illuminate\Support\Str;2 3$base64 = Str::toBase64('Laravel');4 5// TGFyYXZlbA==
Str::transliterate()
Str::transliterate 方法将尝试把给定的字符串转换为最接近的 ASCII 表示。
1use Illuminate\Support\Str;2 3$email = Str::transliterate('ⓣⓔⓢⓣ@ⓛⓐⓡⓐⓥⓔⓛ.ⓒⓞⓜ');4
Str::trim()
Str::trim 方法剥离给定字符串开头和结尾的空白(或其他字符)。与 PHP 原生 trim 函数不同,Str::trim 方法还会去除 Unicode 空白字符。
1use Illuminate\Support\Str;2 3$string = Str::trim(' foo bar ');4 5// 'foo bar'
Str::ltrim()
Str::ltrim 方法剥离给定字符串开头的空白(或其他字符)。与 PHP 原生 ltrim 函数不同,Str::ltrim 方法还会去除 Unicode 空白字符。
1use Illuminate\Support\Str;2 3$string = Str::ltrim(' foo bar ');4 5// 'foo bar '
Str::rtrim()
Str::rtrim 方法剥离给定字符串结尾的空白(或其他字符)。与 PHP 原生 rtrim 函数不同,Str::rtrim 方法还会去除 Unicode 空白字符。
1use Illuminate\Support\Str;2 3$string = Str::rtrim(' foo bar ');4 5// ' foo bar'
Str::ucfirst()
Str::ucfirst 方法返回首字母大写后的字符串。
1use Illuminate\Support\Str;2 3$string = Str::ucfirst('foo bar');4 5// Foo bar
Str::ucsplit()
Str::ucsplit 方法按大写字符将给定的字符串拆分为数组。
1use Illuminate\Support\Str;2 3$segments = Str::ucsplit('FooBar');4 5// [0 => 'Foo', 1 => 'Bar']
Str::ucwords()
Str::ucwords 方法将给定字符串中每个单词的首字母转换为大写。
1use Illuminate\Support\Str;2 3$string = Str::ucwords('laravel framework');4 5// Laravel Framework
Str::upper()
Str::upper 方法将给定字符串转换为大写。
1use Illuminate\Support\Str;2 3$string = Str::upper('laravel');4 5// LARAVEL
Str::ulid()
Str::ulid 方法生成一个 ULID,这是一种紧凑的、按时间排序的唯一标识符。
1use Illuminate\Support\Str;2 3return (string) Str::ulid();4 5// 01gd6r360bp37zj17nxb55yv40
如果你想检索代表 ULID 创建日期和时间的 Illuminate\Support\Carbon 日期实例,你可以使用 Laravel Carbon 集成提供的 createFromId 方法。
1use Illuminate\Support\Carbon;2use Illuminate\Support\Str;3 4$date = Carbon::createFromId((string) Str::ulid());
在测试期间,可能会需要“伪造” Str::ulid 方法的返回值。为此,你可以使用 createUlidsUsing 方法。
1use Symfony\Component\Uid\Ulid;2 3Str::createUlidsUsing(function () {4 return new Ulid('01HRDBNHHCKNW2AK4Z29SN82T9');5});
要指示 ulid 方法恢复正常生成 ULID,你可以调用 createUlidsNormally 方法。
1Str::createUlidsNormally();
Str::unwrap()
Str::unwrap 方法从给定字符串的开头和结尾移除指定的字符串。
1use Illuminate\Support\Str;2 3Str::unwrap('-Laravel-', '-');4 5// Laravel6 7Str::unwrap('{framework: "Laravel"}', '{', '}');8 9// framework: "Laravel"
Str::uuid()
Str::uuid 方法生成一个 UUID(版本 4)。
1use Illuminate\Support\Str;2 3return (string) Str::uuid();
在测试期间,可能会需要“伪造” Str::uuid 方法的返回值。为此,你可以使用 createUuidsUsing 方法。
1use Ramsey\Uuid\Uuid;2 3Str::createUuidsUsing(function () {4 return Uuid::fromString('eadbfeac-5258-45c2-bab7-ccb9b5ef74f9');5});
要指示 uuid 方法恢复正常生成 UUID,你可以调用 createUuidsNormally 方法。
1Str::createUuidsNormally();
Str::uuid7()
Str::uuid7 方法生成一个 UUID(版本 7)。
1use Illuminate\Support\Str;2 3return (string) Str::uuid7();
可以传递一个 DateTimeInterface 作为可选参数,用于生成排序 UUID。
1return (string) Str::uuid7(time: now());
Str::wordCount()
Str::wordCount 方法返回字符串包含的单词数。
1use Illuminate\Support\Str;2 3Str::wordCount('Hello, world!'); // 2
Str::wordWrap()
Str::wordWrap 方法将字符串换行到指定的字符数。
1use Illuminate\Support\Str; 2 3$text = "The quick brown fox jumped over the lazy dog." 4 5Str::wordWrap($text, characters: 20, break: "<br />\n"); 6 7/* 8The quick brown fox<br /> 9jumped over the lazy<br />10dog.11*/
Str::words()
Str::words 方法限制字符串中的单词数量。可以通过第三个参数传递一个附加字符串,指定在截断字符串末尾应追加的内容。
1use Illuminate\Support\Str;2 3return Str::words('Perfectly balanced, as all things should be.', 3, ' >>>');4 5// Perfectly balanced, as >>>
Str::wrap()
Str::wrap 方法用附加字符串或一对字符串包裹给定的字符串。
1use Illuminate\Support\Str;2 3Str::wrap('Laravel', '"');4 5// "Laravel"6 7Str::wrap('is', before: 'This ', after: ' Laravel!');8 9// This is Laravel!
str()
str 函数返回给定字符串的一个新的 Illuminate\Support\Stringable 实例。此函数等同于 Str::of 方法。
1$string = str('Taylor')->append(' Otwell');2 3// 'Taylor Otwell'
如果没有向 str 函数提供参数,该函数将返回 Illuminate\Support\Str 的一个实例。
1$snake = str()->snake('FooBar');2 3// 'foo_bar'
trans()
trans 函数使用你的语言文件来翻译给定的翻译键。
1echo trans('messages.welcome');
如果指定的翻译键不存在,trans 函数将返回该键本身。因此,使用上面的例子,如果翻译键不存在,trans 函数会返回 messages.welcome。
trans_choice()
trans_choice 函数根据语法变化翻译给定的翻译键。
1echo trans_choice('messages.notifications', $unreadCount);
如果指定的翻译键不存在,trans_choice 函数将返回该键本身。因此,使用上面的例子,如果翻译键不存在,trans_choice 函数会返回 messages.notifications。
流式字符串 (Fluent Strings)
流式字符串提供了一种更流畅、面向对象的界面来处理字符串值,允许你使用更具可读性的语法来链式调用多个字符串操作,相比传统字符串操作更加简洁。
after
after 方法返回字符串中给定值之后的所有内容。如果该值在字符串中不存在,则返回整个字符串。
1use Illuminate\Support\Str;2 3$slice = Str::of('This is my name')->after('This is');4 5// ' my name'
afterLast
afterLast 方法返回字符串中给定值最后一次出现之后的所有内容。如果该值在字符串中不存在,则返回整个字符串。
1use Illuminate\Support\Str;2 3$slice = Str::of('App\Http\Controllers\Controller')->afterLast('\\');4 5// 'Controller'
apa
apa 方法根据 APA 指南将给定的字符串转换为标题格式。
1use Illuminate\Support\Str;2 3$converted = Str::of('a nice title uses the correct case')->apa();4 5// A Nice Title Uses the Correct Case
append
append 方法将给定的值追加到字符串中。
1use Illuminate\Support\Str;2 3$string = Str::of('Taylor')->append(' Otwell');4 5// 'Taylor Otwell'
ascii
ascii 方法将尝试把字符串转写为 ASCII 值。
1use Illuminate\Support\Str;2 3$string = Str::of('ü')->ascii();4 5// 'u'
basename
basename 方法返回给定字符串的末尾名称组件。
1use Illuminate\Support\Str;2 3$string = Str::of('/foo/bar/baz')->basename();4 5// 'baz'
如有需要,你可以提供一个将从末尾组件中移除的“扩展名”。
1use Illuminate\Support\Str;2 3$string = Str::of('/foo/bar/baz.jpg')->basename('.jpg');4 5// 'baz'
before
before 方法返回字符串中给定值之前的所有内容。
1use Illuminate\Support\Str;2 3$slice = Str::of('This is my name')->before('my name');4 5// 'This is '
beforeLast
beforeLast 方法返回字符串中给定值最后一次出现之前的所有内容。
1use Illuminate\Support\Str;2 3$slice = Str::of('This is my name')->beforeLast('is');4 5// 'This '
between
between 方法返回两个值之间的字符串部分。
1use Illuminate\Support\Str;2 3$converted = Str::of('This is my name')->between('This', 'name');4 5// ' is my '
betweenFirst
betweenFirst 方法返回两个值之间可能的最短字符串部分。
1use Illuminate\Support\Str;2 3$converted = Str::of('[a] bc [d]')->betweenFirst('[', ']');4 5// 'a'
camel
camel 方法将给定的字符串转换为 camelCase(驼峰命名)。
1use Illuminate\Support\Str;2 3$converted = Str::of('foo_bar')->camel();4 5// 'fooBar'
charAt
charAt 方法返回指定索引处的字符。如果索引越界,则返回 false。
1use Illuminate\Support\Str;2 3$character = Str::of('This is my name.')->charAt(6);4 5// 's'
classBasename
classBasename 方法返回给定类的类名,并去除命名空间。
1use Illuminate\Support\Str;2 3$class = Str::of('Foo\Bar\Baz')->classBasename();4 5// 'Baz'
chopStart
chopStart 方法仅在给定值出现在字符串开头时,移除第一次出现的该值。
1use Illuminate\Support\Str;2 3$url = Str::of('https://laravel.net.cn')->chopStart('https://');4 5// 'laravel.com'
你也可以传入一个数组。如果字符串以数组中的任何值开头,那么该值将从字符串中移除。
1use Illuminate\Support\Str;2 3$url = Str::of('https://laravel.net.cn')->chopStart(['https://', 'http://']);4 5// 'laravel.com'
chopEnd
chopEnd 方法仅在给定值出现在字符串结尾时,移除最后一次出现的该值。
1use Illuminate\Support\Str;2 3$url = Str::of('https://laravel.net.cn')->chopEnd('.com');4 5// 'https://laravel'
你也可以传入一个数组。如果字符串以数组中的任何值结尾,那么该值将从字符串中移除。
1use Illuminate\Support\Str;2 3$url = Str::of('https://laravel.net.cn')->chopEnd(['.com', '.io']);4 5// 'http://laravel'
contains
contains 方法确定给定的字符串是否包含给定的值。默认情况下,此方法区分大小写。
1use Illuminate\Support\Str;2 3$contains = Str::of('This is my name')->contains('my');4 5// true
你也可以传入一个数组来确定字符串是否包含数组中的任何值。
1use Illuminate\Support\Str;2 3$contains = Str::of('This is my name')->contains(['my', 'foo']);4 5// true
你可以通过将 ignoreCase 参数设置为 true 来禁用大小写敏感性。
1use Illuminate\Support\Str;2 3$contains = Str::of('This is my name')->contains('MY', ignoreCase: true);4 5// true
containsAll
containsAll 方法确定给定的字符串是否包含数组中的所有值。
1use Illuminate\Support\Str;2 3$containsAll = Str::of('This is my name')->containsAll(['my', 'name']);4 5// true
你可以通过将 ignoreCase 参数设置为 true 来禁用大小写敏感性。
1use Illuminate\Support\Str;2 3$containsAll = Str::of('This is my name')->containsAll(['MY', 'NAME'], ignoreCase: true);4 5// true
decrypt
decrypt 方法解密加密后的字符串。
1use Illuminate\Support\Str;2 3$decrypted = $encrypted->decrypt();4 5// 'secret'
有关 decrypt 的反向操作,请参见 encrypt 方法。
deduplicate
deduplicate 方法将字符串中连续重复的字符替换为单个字符。默认情况下,该方法对空格进行去重。
1use Illuminate\Support\Str;2 3$result = Str::of('The Laravel Framework')->deduplicate();4 5// The Laravel Framework
你可以通过将要去重的字符作为第二个参数传递给该方法来指定不同的字符。
1use Illuminate\Support\Str;2 3$result = Str::of('The---Laravel---Framework')->deduplicate('-');4 5// The-Laravel-Framework
dirname
dirname 方法返回给定字符串的父目录部分。
1use Illuminate\Support\Str;2 3$string = Str::of('/foo/bar/baz')->dirname();4 5// '/foo/bar'
如有需要,你可以指定从字符串中移除多少级目录。
1use Illuminate\Support\Str;2 3$string = Str::of('/foo/bar/baz')->dirname(2);4 5// '/foo'
doesntContain()
doesntContain 方法确定给定的字符串是否不包含给定的值。该方法是 contains 方法的反向操作。默认情况下,此方法区分大小写。
1use Illuminate\Support\Str;2 3$doesntContain = Str::of('This is name')->doesntContain('my');4 5// true
你也可以传入一个值数组,以确定给定的字符串是否不包含数组中的任何值。
1use Illuminate\Support\Str;2 3$doesntContain = Str::of('This is name')->doesntContain(['my', 'framework']);4 5// true
你可以通过将 ignoreCase 参数设置为 true 来禁用大小写敏感性。
1use Illuminate\Support\Str;2 3$doesntContain = Str::of('This is my name')->doesntContain('MY', ignoreCase: true);4 5// false
doesntEndWith
doesntEndWith 方法确定给定的字符串是否不以给定值结尾。
1use Illuminate\Support\Str;2 3$result = Str::of('This is my name')->doesntEndWith('dog');4 5// true
你也可以传入一个值数组来确定字符串是否不以数组中的任何值结尾。
1use Illuminate\Support\Str;2 3$result = Str::of('This is my name')->doesntEndWith(['this', 'foo']);4 5// true6 7$result = Str::of('This is my name')->doesntEndWith(['name', 'foo']);8 9// false
doesntStartWith
doesntStartWith 方法确定给定的字符串是否不以给定值开头。
1use Illuminate\Support\Str;2 3$result = Str::of('This is my name')->doesntStartWith('That');4 5// true
你也可以传入一个值数组,以确定给定的字符串是否不以数组中的任何值开头。
1use Illuminate\Support\Str;2 3$result = Str::of('This is my name')->doesntStartWith(['What', 'That', 'There']);4 5// true
encrypt
encrypt 方法加密该字符串。
1use Illuminate\Support\Str;2 3$encrypted = Str::of('secret')->encrypt();
有关 encrypt 的反向操作,请参见 decrypt 方法。
endsWith
endsWith 方法确定给定的字符串是否以给定值结尾。
1use Illuminate\Support\Str;2 3$result = Str::of('This is my name')->endsWith('name');4 5// true
你也可以传入一个值数组来确定字符串是否以数组中的任何值结尾。
1use Illuminate\Support\Str;2 3$result = Str::of('This is my name')->endsWith(['name', 'foo']);4 5// true6 7$result = Str::of('This is my name')->endsWith(['this', 'foo']);8 9// false
exactly
exactly 方法确定给定的字符串是否与另一个字符串完全匹配。
1use Illuminate\Support\Str;2 3$result = Str::of('Laravel')->exactly('Laravel');4 5// true
excerpt
excerpt 方法从字符串中提取与短语首次出现位置相匹配的摘录。
1use Illuminate\Support\Str;2 3$excerpt = Str::of('This is my name')->excerpt('my', [4 'radius' => 35]);6 7// '...is my na...'
radius 选项(默认为 100)允许你定义截断字符串每一侧应显示的字符数。
此外,你可以使用 omission 选项来更改在截断字符串前后添加的字符串。
1use Illuminate\Support\Str;2 3$excerpt = Str::of('This is my name')->excerpt('name', [4 'radius' => 3,5 'omission' => '(...) '6]);7 8// '(...) my name'
explode
explode 方法通过给定的定界符拆分字符串,并返回包含拆分后每一部分的集合。
1use Illuminate\Support\Str;2 3$collection = Str::of('foo bar baz')->explode(' ');4 5// collect(['foo', 'bar', 'baz'])
finish
finish 方法在字符串不以给定值结尾时,在字符串末尾添加一个该值。
1use Illuminate\Support\Str;2 3$adjusted = Str::of('this/string')->finish('/');4 5// this/string/6 7$adjusted = Str::of('this/string/')->finish('/');8 9// this/string/
fromBase64
fromBase64 方法对给定的 Base64 字符串进行解码。
1use Illuminate\Support\Str;2 3$decoded = Str::of('TGFyYXZlbA==')->fromBase64();4 5// Laravel
hash
hash 方法使用给定的算法对字符串进行哈希处理。
1use Illuminate\Support\Str;2 3$hashed = Str::of('secret')->hash(algorithm: 'sha256');4 5// '2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b'
headline
headline 方法将由大小写、连字符或下划线分隔的字符串转换为以空格分隔的字符串,并将每个单词的首字母大写。
1use Illuminate\Support\Str;2 3$headline = Str::of('taylor_otwell')->headline();4 5// Taylor Otwell6 7$headline = Str::of('EmailNotificationSent')->headline();8 9// Email Notification Sent
initials
initials 方法将字符串转换为其首字母缩写。
1use Illuminate\Support\Str;2 3$initials = Str::of('Taylor Otwell')->initials()->upper();4 5// TO
inlineMarkdown
inlineMarkdown 方法使用 CommonMark 将 GitHub 风格的 Markdown 转换为内联 HTML。但与 markdown 方法不同的是,它不会将生成的 HTML 包裹在块级元素中。
1use Illuminate\Support\Str;2 3$html = Str::of('**Laravel**')->inlineMarkdown();4 5// <strong>Laravel</strong>
Markdown 安全性
默认情况下,Markdown 支持原生 HTML,在处理未经处理的用户输入时可能会暴露跨站脚本攻击 (XSS) 漏洞。根据 CommonMark 安全文档,你可以使用 html_input 选项来转义或剥离原生 HTML,并使用 allow_unsafe_links 选项来指定是否允许不安全的链接。如果你需要允许某些原生 HTML,你应该通过 HTML Purifier 对编译后的 Markdown 进行过滤。
1use Illuminate\Support\Str;2 3Str::of('Inject: <script>alert("Hello XSS!");</script>')->inlineMarkdown([4 'html_input' => 'strip',5 'allow_unsafe_links' => false,6]);7 8// Inject: alert("Hello XSS!");
is
is 方法确定给定的字符串是否匹配指定的模式。星号 (*) 可用作通配符。
1use Illuminate\Support\Str;2 3$matches = Str::of('foobar')->is('foo*');4 5// true6 7$matches = Str::of('foobar')->is('baz*');8 9// false
isAscii
isAscii 方法确定给定的字符串是否为 ASCII 字符串。
1use Illuminate\Support\Str;2 3$result = Str::of('Taylor')->isAscii();4 5// true6 7$result = Str::of('ü')->isAscii();8 9// false
isEmpty
isEmpty 方法确定给定的字符串是否为空。
1use Illuminate\Support\Str;2 3$result = Str::of(' ')->trim()->isEmpty();4 5// true6 7$result = Str::of('Laravel')->trim()->isEmpty();8 9// false
isNotEmpty
isNotEmpty 方法确定给定的字符串是否不为空。
1use Illuminate\Support\Str;2 3$result = Str::of(' ')->trim()->isNotEmpty();4 5// false6 7$result = Str::of('Laravel')->trim()->isNotEmpty();8 9// true
isJson
isJson 方法确定给定的字符串是否为有效的 JSON。
1use Illuminate\Support\Str; 2 3$result = Str::of('[1,2,3]')->isJson(); 4 5// true 6 7$result = Str::of('{"first": "John", "last": "Doe"}')->isJson(); 8 9// true10 11$result = Str::of('{first: "John", last: "Doe"}')->isJson();12 13// false
isUlid
isUlid 方法确定给定的字符串是否为 ULID。
1use Illuminate\Support\Str;2 3$result = Str::of('01gd6r360bp37zj17nxb55yv40')->isUlid();4 5// true6 7$result = Str::of('Taylor')->isUlid();8 9// false
isUrl
isUrl 方法确定给定的字符串是否为 URL。
1use Illuminate\Support\Str;2 3$result = Str::of('http://example.com')->isUrl();4 5// true6 7$result = Str::of('Taylor')->isUrl();8 9// false
isUrl 方法支持多种协议。你可以通过向 isUrl 方法提供协议列表来指定哪些协议应被视为有效。
1$result = Str::of('http://example.com')->isUrl(['http', 'https']);
isUuid
isUuid 方法确定给定的字符串是否为 UUID。
1use Illuminate\Support\Str;2 3$result = Str::of('5ace9ab9-e9cf-4ec6-a19d-5881212a452c')->isUuid();4 5// true6 7$result = Str::of('Taylor')->isUuid();8 9// false
你还可以按版本(1, 3, 4, 5, 6, 7 或 8)验证给定 UUID 是否符合 UUID 规范。
1use Illuminate\Support\Str;2 3$isUuid = Str::of('a0a2a2d2-0b87-4a18-83f2-2529882be2de')->isUuid(version: 4);4 5// true6 7$isUuid = Str::of('a0a2a2d2-0b87-4a18-83f2-2529882be2de')->isUuid(version: 1);8 9// false
kebab
kebab 方法将给定的字符串转换为 kebab-case。
1use Illuminate\Support\Str;2 3$converted = Str::of('fooBar')->kebab();4 5// foo-bar
lcfirst
lcfirst 方法返回首字母小写后的字符串。
1use Illuminate\Support\Str;2 3$string = Str::of('Foo Bar')->lcfirst();4 5// foo Bar
length
length 方法返回给定字符串的长度。
1use Illuminate\Support\Str;2 3$length = Str::of('Laravel')->length();4 5// 7
limit
limit 方法将给定的字符串截断为指定长度。
1use Illuminate\Support\Str;2 3$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);4 5// The quick brown fox...
你也可以传入第二个参数来更改追加到截断字符串末尾的内容。
1$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20, ' (...)');2 3// The quick brown fox (...)
如果你想在截断字符串时保留完整的单词,可以使用 preserveWords 参数。当此参数为 true 时,字符串将被截断到最近的完整单词边界。
1$truncated = Str::of('The quick brown fox')->limit(12, preserveWords: true);2 3// The quick...
lower
lower 方法将给定的字符串转换为小写。
1use Illuminate\Support\Str;2 3$result = Str::of('LARAVEL')->lower();4 5// 'laravel'
markdown
markdown 方法将 GitHub 风格的 Markdown 转换为 HTML。
1use Illuminate\Support\Str; 2 3$html = Str::of('# Laravel')->markdown(); 4 5// <h1>Laravel</h1> 6 7$html = Str::of('# Taylor <b>Otwell</b>')->markdown([ 8 'html_input' => 'strip', 9]);10 11// <h1>Taylor Otwell</h1>
Markdown 安全性
默认情况下,Markdown 支持原生 HTML,在处理未经处理的用户输入时可能会暴露跨站脚本攻击 (XSS) 漏洞。根据 CommonMark 安全文档,你可以使用 html_input 选项来转义或剥离原生 HTML,并使用 allow_unsafe_links 选项来指定是否允许不安全的链接。如果你需要允许某些原生 HTML,你应该通过 HTML Purifier 对编译后的 Markdown 进行过滤。
1use Illuminate\Support\Str;2 3Str::of('Inject: <script>alert("Hello XSS!");</script>')->markdown([4 'html_input' => 'strip',5 'allow_unsafe_links' => false,6]);7 8// <p>Inject: alert("Hello XSS!");</p>
mask
mask 方法用重复字符屏蔽字符串的一部分,可用于混淆电子邮件地址和电话号码等字符串片段。
1use Illuminate\Support\Str;2 4 5// tay***************
如有需要,你可以提供负数作为 mask 方法的第三或第四个参数,这将指示方法从字符串末尾的指定距离处开始屏蔽。
2 3// tay***@example.com4 6 7// tayl**********.com
match
match 方法返回字符串中匹配给定正则表达式模式的部分。
1use Illuminate\Support\Str;2 3$result = Str::of('foo bar')->match('/bar/');4 5// 'bar'6 7$result = Str::of('foo bar')->match('/foo (.*)/');8 9// 'bar'
matchAll
matchAll 方法返回一个集合,其中包含字符串中与给定正则表达式匹配的所有部分。
1use Illuminate\Support\Str;2 3$result = Str::of('bar foo bar')->matchAll('/bar/');4 5// collect(['bar', 'bar'])
如果在表达式中指定了匹配组,Laravel 将返回包含第一个匹配组结果的集合。
1use Illuminate\Support\Str;2 3$result = Str::of('bar fun bar fly')->matchAll('/f(\w*)/');4 5// collect(['un', 'ly']);
如果没有找到匹配项,将返回一个空集合。
isMatch
如果字符串匹配给定的正则表达式,isMatch 方法将返回 true。
1use Illuminate\Support\Str;2 3$result = Str::of('foo bar')->isMatch('/foo (.*)/');4 5// true6 7$result = Str::of('laravel')->isMatch('/foo (.*)/');8 9// false
newLine
newLine 方法在字符串末尾添加一个“换行”字符。
1use Illuminate\Support\Str;2 3$padded = Str::of('Laravel')->newLine()->append('Framework');4 5// 'Laravel6// Framework'
padBoth
padBoth 方法包装了 PHP 的 str_pad 函数,在字符串两侧填充另一个字符串,直到达到指定长度。
1use Illuminate\Support\Str;2 3$padded = Str::of('James')->padBoth(10, '_');4 5// '__James___'6 7$padded = Str::of('James')->padBoth(10);8 9// ' James '
padLeft
padLeft 方法包装了 PHP 的 str_pad 函数,在字符串左侧填充另一个字符串,直到达到指定长度。
1use Illuminate\Support\Str;2 3$padded = Str::of('James')->padLeft(10, '-=');4 5// '-=-=-James'6 7$padded = Str::of('James')->padLeft(10);8 9// ' James'
padRight
padRight 方法包装了 PHP 的 str_pad 函数,在字符串右侧填充另一个字符串,直到达到指定长度。
1use Illuminate\Support\Str;2 3$padded = Str::of('James')->padRight(10, '-');4 5// 'James-----'6 7$padded = Str::of('James')->padRight(10);8 9// 'James '
pipe
pipe 方法允许你通过将字符串当前值传递给给定的可调用对象来转换该字符串。
1use Illuminate\Support\Str; 2use Illuminate\Support\Stringable; 3 4$hash = Str::of('Laravel')->pipe('md5')->prepend('Checksum: '); 5 6// 'Checksum: a5c95b86291ea299fcbe64458ed12702' 7 8$closure = Str::of('foo')->pipe(function (Stringable $str) { 9 return 'bar';10});11 12// 'bar'
plural
plural 方法将单数词转换为复数形式。此函数支持 Laravel 复数化器支持的所有语言。
1use Illuminate\Support\Str;2 3$plural = Str::of('car')->plural();4 5// cars6 7$plural = Str::of('child')->plural();8 9// children
你可以提供一个整数参数,以检索字符串的单数或复数形式。
1use Illuminate\Support\Str;2 3$plural = Str::of('child')->plural(2);4 5// children6 7$plural = Str::of('child')->plural(1);8 9// child
可以使用 prependCount 参数在复数化后的字符串前加上格式化后的 $count。
1use Illuminate\Support\Str;2 3$label = Str::of('car')->plural(1000, prependCount: true);4 5// 1,000 cars
position
position 方法返回子字符串在字符串中第一次出现的位置。如果子字符串不存在,则返回 false。
1use Illuminate\Support\Str;2 3$position = Str::of('Hello, World!')->position('Hello');4 5// 06 7$position = Str::of('Hello, World!')->position('W');8 9// 7
prepend
prepend 方法将给定的值预置到字符串中。
1use Illuminate\Support\Str;2 3$string = Str::of('Framework')->prepend('Laravel ');4 5// Laravel Framework
remove
remove 方法从字符串中移除给定值或值数组。
1use Illuminate\Support\Str;2 3$string = Str::of('Arkansas is quite beautiful!')->remove('quite ');4 5// Arkansas is beautiful!
你也可以传入 false 作为第二个参数,以在移除字符串时忽略大小写。
repeat
repeat 方法重复给定的字符串。
1use Illuminate\Support\Str;2 3$repeated = Str::of('a')->repeat(5);4 5// aaaaa
replace
replace 方法替换字符串中的给定内容。
1use Illuminate\Support\Str;2 3$replaced = Str::of('Laravel 6.x')->replace('6.x', '7.x');4 5// Laravel 7.x
replace 方法还接受一个 caseSensitive 参数。默认情况下,该方法区分大小写。
1$replaced = Str::of('macOS 13.x')->replace(2 'macOS', 'iOS', caseSensitive: false3);
replaceArray
replaceArray 方法使用数组顺序替换字符串中的给定值。
1use Illuminate\Support\Str;2 3$string = 'The event will take place between ? and ?';4 5$replaced = Str::of($string)->replaceArray('?', ['8:30', '9:00']);6 7// The event will take place between 8:30 and 9:00
replaceFirst
replaceFirst 方法替换字符串中第一次出现的给定值。
1use Illuminate\Support\Str;2 3$replaced = Str::of('the quick brown fox jumps over the lazy dog')->replaceFirst('the', 'a');4 5// a quick brown fox jumps over the lazy dog
replaceLast
replaceLast 方法替换字符串中最后一次出现的给定值。
1use Illuminate\Support\Str;2 3$replaced = Str::of('the quick brown fox jumps over the lazy dog')->replaceLast('the', 'a');4 5// the quick brown fox jumps over a lazy dog
replaceMatches
replaceMatches 方法将字符串中所有匹配给定模式的部分替换为指定的替换字符串。
1use Illuminate\Support\Str;2 3$replaced = Str::of('(+1) 501-555-1000')->replaceMatches('/[^A-Za-z0-9]++/', '')4 5// '15015551000'
replaceMatches 方法还接受一个闭包,该闭包会被传入匹配的部分,允许你在闭包内执行替换逻辑并返回替换后的值。
1use Illuminate\Support\Str;2 3$replaced = Str::of('123')->replaceMatches('/\d/', function (array $matches) {4 return '['.$matches[0].']';5});6 7// '[1][2][3]'
replaceStart
replaceStart 方法仅在给定值出现在字符串开头时,替换第一次出现的该值。
1use Illuminate\Support\Str;2 3$replaced = Str::of('Hello World')->replaceStart('Hello', 'Laravel');4 5// Laravel World6 7$replaced = Str::of('Hello World')->replaceStart('World', 'Laravel');8 9// Hello World
replaceEnd
replaceEnd 方法仅在给定值出现在字符串结尾时,替换最后一次出现的该值。
1use Illuminate\Support\Str;2 3$replaced = Str::of('Hello World')->replaceEnd('World', 'Laravel');4 5// Hello Laravel6 7$replaced = Str::of('Hello World')->replaceEnd('Hello', 'Laravel');8 9// Hello World
scan
scan 方法根据 PHP sscanf 函数支持的格式将输入解析为集合。
1use Illuminate\Support\Str;2 3$collection = Str::of('filename.jpg')->scan('%[^.].%s');4 5// collect(['filename', 'jpg'])
singular
singular 方法将字符串转换为单数形式。此函数支持 Laravel 复数化器支持的所有语言。
1use Illuminate\Support\Str;2 3$singular = Str::of('cars')->singular();4 5// car6 7$singular = Str::of('children')->singular();8 9// child
slug
slug 方法从给定字符串生成 URL 友好的“slug”。
1use Illuminate\Support\Str;2 3$slug = Str::of('Laravel Framework')->slug('-');4 5// laravel-framework
snake
snake 方法将给定的字符串转换为 snake_case。
1use Illuminate\Support\Str;2 3$converted = Str::of('fooBar')->snake();4 5// foo_bar
split
split 方法使用正则表达式将字符串拆分为集合。
1use Illuminate\Support\Str;2 3$segments = Str::of('one, two, three')->split('/[\s,]+/');4 5// collect(["one", "two", "three"])
squish
squish 方法移除字符串中所有无关的空白,包括单词之间的多余空白。
1use Illuminate\Support\Str;2 3$string = Str::of(' laravel framework ')->squish();4 5// laravel framework
start
start 方法在字符串不以给定值开头时,在字符串开头添加一个该值。
1use Illuminate\Support\Str;2 3$adjusted = Str::of('this/string')->start('/');4 5// /this/string6 7$adjusted = Str::of('/this/string')->start('/');8 9// /this/string
startsWith
startsWith 方法确定给定的字符串是否以给定值开头。
1use Illuminate\Support\Str;2 3$result = Str::of('This is my name')->startsWith('This');4 5// true
你也可以传入一个值数组,以确定给定的字符串是否以数组中的任何值开头。
1use Illuminate\Support\Str;2 3$result = Str::of('This is my name')->startsWith(['This', 'That']);4 5// true
stripTags
stripTags 方法从字符串中移除所有 HTML 和 PHP 标签。
1use Illuminate\Support\Str;2 3$result = Str::of('<a href="https://laravel.net.cn">Taylor <b>Otwell</b></a>')->stripTags();4 5// Taylor Otwell6 7$result = Str::of('<a href="https://laravel.net.cn">Taylor <b>Otwell</b></a>')->stripTags('<b>');8 9// Taylor <b>Otwell</b>
studly
studly 方法将给定的字符串转换为 StudlyCase。
1use Illuminate\Support\Str;2 3$converted = Str::of('foo_bar')->studly();4 5// FooBar
substr
substr 方法返回由给定起始和长度参数指定的字符串部分。
1use Illuminate\Support\Str;2 3$string = Str::of('Laravel Framework')->substr(8);4 5// Framework6 7$string = Str::of('Laravel Framework')->substr(8, 5);8 9// Frame
substrReplace
substrReplace 方法替换字符串中指定位置的部分文本,从第二个参数指定的位置开始,替换第三个参数指定长度的字符。将 0 传递给该方法的第三个参数将会在指定位置插入字符串而不替换任何现有字符。
1use Illuminate\Support\Str;2 3$string = Str::of('1300')->substrReplace(':', 2);4 5// 13:6 7$string = Str::of('The Framework')->substrReplace(' Laravel', 3, 0);8 9// The Laravel Framework
swap
swap 方法使用 PHP 的 strtr 函数替换字符串中的多个值。
1use Illuminate\Support\Str;2 3$string = Str::of('Tacos are great!')4 ->swap([5 'Tacos' => 'Burritos',6 'great' => 'fantastic',7 ]);8 9// Burritos are fantastic!
take
take 方法返回字符串开头指定数量的字符。
1use Illuminate\Support\Str;2 3$taken = Str::of('Build something amazing!')->take(5);4 5// Build
tap
tap 方法将字符串传递给给定的闭包,允许你检查和交互该字符串而不影响字符串本身。无论闭包返回什么,tap 方法始终返回原始字符串。
1use Illuminate\Support\Str; 2use Illuminate\Support\Stringable; 3 4$string = Str::of('Laravel') 5 ->append(' Framework') 6 ->tap(function (Stringable $string) { 7 dump('String after append: '.$string); 8 }) 9 ->upper();10 11// LARAVEL FRAMEWORK
test
test 方法确定字符串是否匹配给定的正则表达式模式。
1use Illuminate\Support\Str;2 3$result = Str::of('Laravel Framework')->test('/Laravel/');4 5// true
title
title 方法将给定的字符串转换为 Title Case。
1use Illuminate\Support\Str;2 3$converted = Str::of('a nice title uses the correct case')->title();4 5// A Nice Title Uses The Correct Case
toBase64
toBase64 方法将给定字符串转换为 Base64。
1use Illuminate\Support\Str;2 3$base64 = Str::of('Laravel')->toBase64();4 5// TGFyYXZlbA==
toHtmlString
toHtmlString 方法将给定字符串转换为 Illuminate\Support\HtmlString 实例,该实例在 Blade 模板中呈现时不会被转义。
1use Illuminate\Support\Str;2 3$htmlString = Str::of('Nuno Maduro')->toHtmlString();
toUri
toUri 方法将给定的字符串转换为 Illuminate\Support\Uri 实例。
1use Illuminate\Support\Str;2 3$uri = Str::of('https://example.com')->toUri();
transliterate
transliterate 方法将尝试把给定的字符串转换为最接近的 ASCII 表示。
1use Illuminate\Support\Str;2 3$email = Str::of('ⓣⓔⓢⓣ@ⓛⓐⓡⓐⓥⓔⓛ.ⓒⓞⓜ')->transliterate()4
trim
trim 方法修剪给定字符串。与 PHP 原生 trim 函数不同,Laravel 的 trim 方法还会去除 Unicode 空白字符。
1use Illuminate\Support\Str;2 3$string = Str::of(' Laravel ')->trim();4 5// 'Laravel'6 7$string = Str::of('/Laravel/')->trim('/');8 9// 'Laravel'
ltrim
ltrim 方法修剪字符串左侧。与 PHP 原生 ltrim 函数不同,Laravel 的 ltrim 方法还会去除 Unicode 空白字符。
1use Illuminate\Support\Str;2 3$string = Str::of(' Laravel ')->ltrim();4 5// 'Laravel '6 7$string = Str::of('/Laravel/')->ltrim('/');8 9// 'Laravel/'
rtrim
rtrim 方法修剪给定字符串右侧。与 PHP 原生 rtrim 函数不同,Laravel 的 rtrim 方法还会去除 Unicode 空白字符。
1use Illuminate\Support\Str;2 3$string = Str::of(' Laravel ')->rtrim();4 5// ' Laravel'6 7$string = Str::of('/Laravel/')->rtrim('/');8 9// '/Laravel'
ucfirst
ucfirst 方法返回首字母大写后的字符串。
1use Illuminate\Support\Str;2 3$string = Str::of('foo bar')->ucfirst();4 5// Foo bar
ucsplit
ucsplit 方法按大写字符将给定的字符串拆分为集合。
1use Illuminate\Support\Str;2 3$string = Str::of('Foo Bar')->ucsplit();4 5// collect(['Foo ', 'Bar'])
ucwords
ucwords 方法将给定字符串中每个单词的首字母转换为大写。
1use Illuminate\Support\Str;2 3$string = Str::of('laravel framework')->ucwords();4 5// Laravel Framework
unwrap
unwrap 方法从给定字符串的开头和结尾移除指定的字符串。
1use Illuminate\Support\Str;2 3Str::of('-Laravel-')->unwrap('-');4 5// Laravel6 7Str::of('{framework: "Laravel"}')->unwrap('{', '}');8 9// framework: "Laravel"
upper
upper 方法将给定字符串转换为大写。
1use Illuminate\Support\Str;2 3$adjusted = Str::of('laravel')->upper();4 5// LARAVEL
when
如果给定的条件为 true,when 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('Taylor')5 ->when(true, function (Stringable $string) {6 return $string->append(' Otwell');7 });8 9// 'Taylor Otwell'
如有需要,你可以将另一个闭包作为第三个参数传递给 when 方法。如果条件参数计算为 false,则执行该闭包。
whenContains
如果字符串包含给定值,whenContains 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('tony stark')5 ->whenContains('tony', function (Stringable $string) {6 return $string->title();7 });8 9// 'Tony Stark'
如有需要,你可以将另一个闭包作为第三个参数传递。如果字符串不包含给定值,则调用该闭包。
你也可以传入一个数组来确定字符串是否包含数组中的任何值。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('tony stark')5 ->whenContains(['tony', 'hulk'], function (Stringable $string) {6 return $string->title();7 });8 9// Tony Stark
whenContainsAll
如果字符串包含所有给定的子字符串,whenContainsAll 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('tony stark')5 ->whenContainsAll(['tony', 'stark'], function (Stringable $string) {6 return $string->title();7 });8 9// 'Tony Stark'
如有需要,你可以将另一个闭包作为第三个参数传递。如果条件参数计算为 false,则调用该闭包。
whenDoesntEndWith
如果字符串不以给定子字符串结尾,whenDoesntEndWith 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('disney world')->whenDoesntEndWith('land', function (Stringable $string) {5 return $string->title();6});7 8// 'Disney World'
whenDoesntStartWith
如果字符串不以给定子字符串开头,whenDoesntStartWith 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('disney world')->whenDoesntStartWith('sea', function (Stringable $string) {5 return $string->title();6});7 8// 'Disney World'
whenEmpty
如果字符串为空,whenEmpty 方法将调用给定的闭包。如果闭包返回一个值,该值也将由 whenEmpty 方法返回。如果闭包不返回任何值,则返回流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of(' ')->trim()->whenEmpty(function (Stringable $string) {5 return $string->prepend('Laravel');6});7 8// 'Laravel'
whenNotEmpty
如果字符串不为空,whenNotEmpty 方法将调用给定的闭包。如果闭包返回一个值,该值也将由 whenNotEmpty 方法返回。如果闭包不返回任何值,则返回流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('Framework')->whenNotEmpty(function (Stringable $string) {5 return $string->prepend('Laravel ');6});7 8// 'Laravel Framework'
whenStartsWith
如果字符串以给定子字符串开头,whenStartsWith 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('disney world')->whenStartsWith('disney', function (Stringable $string) {5 return $string->title();6});7 8// 'Disney World'
whenEndsWith
如果字符串以给定子字符串结尾,whenEndsWith 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('disney world')->whenEndsWith('world', function (Stringable $string) {5 return $string->title();6});7 8// 'Disney World'
whenExactly
如果字符串与给定字符串完全匹配,whenExactly 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('laravel')->whenExactly('laravel', function (Stringable $string) {5 return $string->title();6});7 8// 'Laravel'
whenNotExactly
如果字符串与给定字符串不完全匹配,whenNotExactly 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('framework')->whenNotExactly('laravel', function (Stringable $string) {5 return $string->title();6});7 8// 'Framework'
whenIs
如果字符串匹配给定的模式,whenIs 方法将调用给定的闭包。星号 (*) 可用作通配符。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('foo/bar')->whenIs('foo/*', function (Stringable $string) {5 return $string->append('/baz');6});7 8// 'foo/bar/baz'
whenIsAscii
如果字符串为 7 位 ASCII,whenIsAscii 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('laravel')->whenIsAscii(function (Stringable $string) {5 return $string->title();6});7 8// 'Laravel'
whenIsUlid
如果字符串为有效的 ULID,whenIsUlid 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2 3$string = Str::of('01gd6r360bp37zj17nxb55yv40')->whenIsUlid(function (Stringable $string) {4 return $string->substr(0, 8);5});6 7// '01gd6r36'
whenIsUuid
如果字符串为有效的 UUID,whenIsUuid 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('a0a2a2d2-0b87-4a18-83f2-2529882be2de')->whenIsUuid(function (Stringable $string) {5 return $string->substr(0, 8);6});7 8// 'a0a2a2d2'
whenTest
如果字符串匹配给定的正则表达式,whenTest 方法将调用给定的闭包。闭包将接收流式字符串实例。
1use Illuminate\Support\Str;2use Illuminate\Support\Stringable;3 4$string = Str::of('laravel framework')->whenTest('/laravel/', function (Stringable $string) {5 return $string->title();6});7 8// 'Laravel Framework'
wordCount
wordCount 方法返回字符串包含的单词数。
1use Illuminate\Support\Str;2 3Str::of('Hello, world!')->wordCount(); // 2
words
words 方法限制字符串中的单词数量。如有需要,你可以指定一个在截断字符串末尾应追加的附加字符串。
1use Illuminate\Support\Str;2 3$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');4 5// Perfectly balanced, as >>>
wrap
wrap 方法用附加字符串或一对字符串包裹给定的字符串。
1use Illuminate\Support\Str;2 3Str::of('Laravel')->wrap('"');4 5// "Laravel"6 7Str::is('is')->wrap(before: 'This ', after: ' Laravel!');8 9// This is Laravel!