字符串
介绍
Laravel 包含各种用于操作字符串值的函数。其中许多函数由框架本身使用;但是,如果您觉得方便,也可以在自己的应用程序中自由使用它们。
可用方法
Strings
__ 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::deduplicate Str::endsWith Str::excerpt Str::finish Str::headline 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::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::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 deduplicate dirname endsWith exactly excerpt explode finish headline 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 unwrap upper when whenContains whenContainsAll 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()
该方法按照APA 指南Str::apa
将给定的字符串转换为标题大小写:
1use Illuminate\Support\Str;2 3$title = Str::apa('Creating A Project');4 5// 'Creating a Project'
Str::ascii()
该Str::ascii
方法将尝试将字符串音译为 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://');4 5// 'laravel.com'
你也可以传递一个数组作为第二个参数。如果字符串以数组中的任何值开头,则该值将从字符串中删除:
1use Illuminate\Support\Str;2 3$url = Str::chopStart('http://laravel.com', ['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', 'foo']);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::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::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::inlineMarkdown()
该方法使用CommonMarkStr::inlineMarkdown
将 GitHub 风格的 Markdown 转换为内联 HTML 。但是,与该方法不同的是,它不会将所有生成的 HTML 包装在块级元素中:markdown
1use Illuminate\Support\Str;2 3$html = Str::inlineMarkdown('**Laravel**');4 5// <strong>Laravel</strong>
Markdown 安全
Markdown 默认支持原始 HTML,当与原始用户输入一起使用时,可能会暴露跨站脚本 (XSS) 漏洞。根据CommonMark Security 文档,您可以使用html_input
转义或剥离原始 HTML 的选项,以及allow_unsafe_links
指定是否允许不安全链接的选项。如果您需要允许某些原始 HTML,则应将编译后的 Markdown 传递给 HTML 净化器:
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
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()
该方法使用CommonMarkStr::markdown
将 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 Security 文档,您可以使用html_input
转义或剥离原始 HTML 的选项,以及allow_unsafe_links
指定是否允许不安全链接的选项。如果您需要允许某些原始 HTML,则应将编译后的 Markdown 传递给 HTML 净化器:
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 3$string = Str::mask('taylor@example.com', '*', 3);4 5// tay***************
如果需要,您可以提供一个负数作为该mask
方法的第三个参数,这将指示该方法从距字符串末尾的给定距离开始进行屏蔽:
1$string = Str::mask('taylor@example.com', '*', -15, 3);2 3// tay***@example.com
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
Str::pluralStudly()
该Str::pluralStudly
方法将以大写字母格式的单数单词字符串转换为复数形式。此函数支持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.
您还可以false
将第三个参数传递给该remove
方法,以便在删除字符串时忽略大小写。
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
参数。默认情况下,该replace
方法区分大小写:
1Str::replace('Framework', 'Laravel', caseSensitive: false);
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 5// 'test@laravel.com'
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::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
如果您想要检索Illuminate\Support\Carbon
表示创建给定 ULID 的日期和时间的日期实例,您可以使用createFromId
Laravel 的 Carbon 集成提供的方法:
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
流畅的字符串
流畅的字符串为处理字符串值提供了更流畅、面向对象的接口,与传统字符串操作相比,它允许您使用更易读的语法将多个字符串操作链接在一起。
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('')->chopStart('https://');4 5// 'laravel.com'
你也可以传递一个数组。如果字符串以数组中的任何值开头,则该值将从字符串中删除:
1use Illuminate\Support\Str;2 3$url = Str::of('http://laravel.com')->chopStart(['https://', 'http://']);4 5// 'laravel.com'
chopEnd
chopEnd
仅当给定值出现在字符串末尾时,该方法才会删除该值的最后一次出现:
1use Illuminate\Support\Str;2 3$url = Str::of('')->chopEnd('.com');4 5// 'https://laravel'
你也可以传递一个数组。如果字符串以数组中的任何值结尾,则该值将从字符串中删除:
1use Illuminate\Support\Str;2 3$url = Str::of('http://laravel.com')->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
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'
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/
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
inlineMarkdown
该方法使用CommonMarkinlineMarkdown
将 GitHub 风格的 Markdown 转换为内联 HTML 。但是,与该方法不同的是,它不会将所有生成的 HTML 包装在块级元素中:markdown
1use Illuminate\Support\Str;2 3$html = Str::of('**Laravel**')->inlineMarkdown();4 5// <strong>Laravel</strong>
Markdown 安全
Markdown 默认支持原始 HTML,当与原始用户输入一起使用时,可能会暴露跨站脚本 (XSS) 漏洞。根据CommonMark Security 文档,您可以使用html_input
转义或剥离原始 HTML 的选项,以及allow_unsafe_links
指定是否允许不安全链接的选项。如果您需要允许某些原始 HTML,则应将编译后的 Markdown 传递给 HTML 净化器:
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
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 Security 文档,您可以使用html_input
转义或剥离原始 HTML 的选项,以及allow_unsafe_links
指定是否允许不安全链接的选项。如果您需要允许某些原始 HTML,则应将编译后的 Markdown 传递给 HTML 净化器:
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 3$string = Str::of('taylor@example.com')->mask('*', 3);4 5// tay***************
如果需要,您可以提供负数作为该mask
方法的第三或第四个参数,这将指示该方法从距字符串末尾的给定距离开始进行屏蔽:
1$string = Str::of('taylor@example.com')->mask('*', -15, 3);2 3// tay***@example.com4 5$string = Str::of('taylor@example.com')->mask('*', 4, -4);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
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
参数。默认情况下,该replace
方法区分大小写:
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
该方法根据PHP 函数scan
支持的格式将字符串输入解析为集合: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
stripTags
该stripTags
方法从字符串中删除所有 HTML 和 PHP 标签:
1use Illuminate\Support\Str;2 3$result = Str::of('<a href="">Taylor <b>Otwell</b></a>')->stripTags();4 5// Taylor Otwell6 7$result = Str::of('<a href="">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
该方法将给定的字符串转换为Illuminate\Support\UritoUri
的实例:
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 5// 'test@laravel.com'
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'])
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
when
如果给定条件成立,则该方法调用给定的闭包true
。闭包将接收流式字符串实例:
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'
如果需要,可以将另一个闭包作为第三个参数传递给该when
方法。如果字符串不包含给定值,则将执行此闭包。
您还可以传递一个值数组来确定给定的字符串是否包含数组中的任何值:
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'
如果需要,可以将另一个闭包作为第三个参数传递给该when
方法。当条件参数的计算结果为 时,此闭包将会执行false
。
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
whenIsAscii
如果字符串是 7 位 ASCII,则该方法调用给定的闭包。闭包将接收流式字符串实例:
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
whenIsUlid
如果字符串是有效的 ULID,则该方法调用给定的闭包。闭包将接收流式字符串实例:
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
whenIsUuid
如果字符串是有效的 UUID,则该方法调用给定的闭包。闭包将接收流式字符串实例:
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!