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