字符串操作
这是一篇协同翻译的文章,你可以点击『我来翻译』按钮来参与翻译。
字符串
介绍
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::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
Strings (字符串)
__()
__
函数会使用你的 语言文件 翻译给定的翻译字符串或翻译键:
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
方法会将给定字符串转换为 标题格式 (title case),
遵循 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.com', 'https://');
// 'laravel.com'
你也可以将数组作为第二个参数传入。
如果字符串是以数组中的任意一个值开头,那么该值会被移除:
use Illuminate\Support\Str;
$url = Str::chopStart('http://laravel.com', ['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 Purifier 进行过滤:
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
你可以通过将 ignoreCase
参数设置为 true
来禁用大小写敏感:
use Illuminate\Support\Str;
$matches = Str::is('*.jpg', 'photo.JPG', ignoreCase: true);
// true
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 Purifier:
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;
$string = Str::mask('taylor@example.com', '*', 3);
// tay***************
如果需要,你可以将一个负数作为第三个参数传给 mask
方法,这会指示该方法从字符串末尾给定的距离处开始掩盖:
$string = Str::mask('taylor@example.com', '*', -15, 3);
// 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 Caps Case)编写的单数单词字符串转换为其复数形式。此函数支持 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';
});
你可以通过调用 createRandomStringsNormally
方法来让 random
方法恢复正常生成随机字符串:
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.
你也可以向 remove
方法传递第三个参数 false
,在移除字符串时忽略大小写。
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 11.x';
$replaced = Str::replace('11.x', '12.x', $string);
// Laravel 12.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()
The Str::reverse
method reverses the given string:
use Illuminate\Support\Str;
$reversed = Str::reverse('Hello World');
// dlroW olleH
Str::singular()
The Str::singular
method converts a string to its singular form. This function supports any of the languages support by Laravel's pluralizer:
use Illuminate\Support\Str;
$singular = Str::singular('cars');
// car
$singular = Str::singular('children');
// child
Str::slug()
The Str::slug
method generates a URL friendly "slug" from the given string:
use Illuminate\Support\Str;
$slug = Str::slug('Laravel 5 Framework', '-');
// laravel-5-framework
Str::snake()
The Str::snake
method converts the given string to snake_case
:
use Illuminate\Support\Str;
$converted = Str::snake('fooBar');
// foo_bar
$converted = Str::snake('fooBar', '-');
// foo-bar
Str::squish()
The Str::squish
method removes all extraneous white space from a string, including extraneous white space between words:
use Illuminate\Support\Str;
$string = Str::squish(' laravel framework ');
// laravel framework
Str::start()
The Str::start
method adds a single instance of the given value to a string if it does not already start with that value:
use Illuminate\Support\Str;
$adjusted = Str::start('this/string', '/');
// /this/string
$adjusted = Str::start('/this/string', '/');
// /this/string
Str::startsWith()
The Str::startsWith
method determines if the given string begins with the given value:
use Illuminate\Support\Str;
$result = Str::startsWith('This is my name', 'This');
// true
If an array of possible values is passed, the startsWith
method will return true
if the string begins with any of the given values:
$result = Str::startsWith('This is my name', ['This', 'That', 'There']);
// true
Str::studly()
The Str::studly
method converts the given string to StudlyCase
:
use Illuminate\Support\Str;
$converted = Str::studly('foo_bar');
// FooBar
Str::substr()
The Str::substr
method returns the portion of string specified by the start and length parameters:
use Illuminate\Support\Str;
$converted = Str::substr('The Laravel Framework', 4, 7);
// Laravel
Str::substrCount()
The Str::substrCount
method returns the number of occurrences of a given value in the given string:
use Illuminate\Support\Str;
$count = Str::substrCount('If you like ice cream, you will like snow cones.', 'like');
// 2
Str::substrReplace()
The Str::substrReplace
method replaces text within a portion of a string, starting at the position specified by the third argument and replacing the number of characters specified by the fourth argument. Passing 0
to the method's fourth argument will insert the string at the specified position without replacing any of the existing characters in the string:
use Illuminate\Support\Str;
$result = Str::substrReplace('1300', ':', 2);
// 13:
$result = Str::substrReplace('1300', ':', 2, 0);
// 13:00
Str::swap()
The Str::swap
method replaces multiple values in the given string using PHP's strtr
function:
use Illuminate\Support\Str;
$string = Str::swap([
'Tacos' => 'Burritos',
'great' => 'fantastic',
], 'Tacos are great!');
// Burritos are fantastic!
Str::take()
The Str::take
method returns a specified number of characters from the beginning of a string:
use Illuminate\Support\Str;
$taken = Str::take('Build something amazing!', 5);
// Build
Str::title()
The Str::title
method converts the given string to 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()
The Str::toBase64
method converts the given string to Base64:
use Illuminate\Support\Str;
$base64 = Str::toBase64('Laravel');
// TGFyYXZlbA==
Str::transliterate()
The Str::transliterate
method will attempt to convert a given string into its closest ASCII representation:
use Illuminate\Support\Str;
$email = Str::transliterate('ⓣⓔⓢⓣ@ⓛⓐⓡⓐⓥⓔⓛ.ⓒⓞⓜ');
// 'test@laravel.com'
Str::trim()
The Str::trim
method strips whitespace (or other characters) from the beginning and end of the given string. Unlike PHP's native trim
function, the Str::trim
method also removes unicode whitespace characters:
use Illuminate\Support\Str;
$string = Str::trim(' foo bar ');
// 'foo bar'
Str::ltrim()
The Str::ltrim
method strips whitespace (or other characters) from the beginning of the given string. Unlike PHP's native ltrim
function, the Str::ltrim
method also removes unicode whitespace characters:
use Illuminate\Support\Str;
$string = Str::ltrim(' foo bar ');
// 'foo bar '
Str::rtrim()
The Str::rtrim
method strips whitespace (or other characters) from the end of the given string. Unlike PHP's native rtrim
function, the Str::rtrim
method also removes unicode whitespace characters:
use Illuminate\Support\Str;
$string = Str::rtrim(' foo bar ');
// ' foo bar'
Str::ucfirst()
The Str::ucfirst
method returns the given string with the first character capitalized:
use Illuminate\Support\Str;
$string = Str::ucfirst('foo bar');
// Foo bar
Str::ucsplit()
The Str::ucsplit
method splits the given string into an array by uppercase characters:
use Illuminate\Support\Str;
$segments = Str::ucsplit('FooBar');
// [0 => 'Foo', 1 => 'Bar']
Str::upper()
The Str::upper
method converts the given string to uppercase:
use Illuminate\Support\Str;
$string = Str::upper('laravel');
// LARAVEL
Str::ulid()
The Str::ulid
method generates a ULID, which is a compact, time-ordered unique identifier:
use Illuminate\Support\Str;
return (string) Str::ulid();
// 01gd6r360bp37zj17nxb55yv40
If you would like to retrieve a Illuminate\Support\Carbon
date instance representing the date and time that a given ULID was created, you may use the createFromId
method provided by Laravel's Carbon integration:
use Illuminate\Support\Carbon;
use Illuminate\Support\Str;
$date = Carbon::createFromId((string) Str::ulid());
During testing, it may be useful to "fake" the value that is returned by the Str::ulid
method. To accomplish this, you may use the createUlidsUsing
method:
use Symfony\Component\Uid\Ulid;
Str::createUlidsUsing(function () {
return new Ulid('01HRDBNHHCKNW2AK4Z29SN82T9');
});
To instruct the ulid
method to return to generating ULIDs normally, you may invoke the createUlidsNormally
method:
Str::createUlidsNormally();
Str::unwrap()
The Str::unwrap
method removes the specified strings from the beginning and end of a given string:
use Illuminate\Support\Str;
Str::unwrap('-Laravel-', '-');
// Laravel
Str::unwrap('{framework: "Laravel"}', '{', '}');
// framework: "Laravel"
Str::uuid()
The Str::uuid
method generates a UUID (version 4):
use Illuminate\Support\Str;
return (string) Str::uuid();
During testing, it may be useful to "fake" the value that is returned by the Str::uuid
method. To accomplish this, you may use the createUuidsUsing
method:
use Ramsey\Uuid\Uuid;
Str::createUuidsUsing(function () {
return Uuid::fromString('eadbfeac-5258-45c2-bab7-ccb9b5ef74f9');
});
To instruct the uuid
method to return to generating UUIDs normally, you may invoke the createUuidsNormally
method:
Str::createUuidsNormally();
Str::uuid7()
The Str::uuid7
method generates a UUID (version 7):
use Illuminate\Support\Str;
return (string) Str::uuid7();
A DateTimeInterface
may be passed as an optional parameter which will be used to generate the ordered UUID:
return (string) Str::uuid7(time: now());
Str::wordCount()
The Str::wordCount
method returns the number of words that a string contains:
use Illuminate\Support\Str;
Str::wordCount('Hello, world!'); // 2
Str::wordWrap()
The Str::wordWrap
method wraps a string to a given number of characters:
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()
The Str::words
method limits the number of words in a string. An additional string may be passed to this method via its third argument to specify which string should be appended to the end of the truncated string:
use Illuminate\Support\Str;
return Str::words('Perfectly balanced, as all things should be.', 3, ' >>>');
// Perfectly balanced, as >>>
Str::wrap()
The Str::wrap
method wraps the given string with an additional string or pair of strings:
use Illuminate\Support\Str;
Str::wrap('Laravel', '"');
// "Laravel"
Str::wrap('is', before: 'This ', after: ' Laravel!');
// This is Laravel!
str()
The str
function returns a new Illuminate\Support\Stringable
instance of the given string. This function is equivalent to the Str::of
method:
$string = str('Taylor')->append(' Otwell');
// 'Taylor Otwell'
If no argument is provided to the str
function, the function returns an instance of Illuminate\Support\Str
:
$snake = str()->snake('FooBar');
// 'foo_bar'
trans()
The trans
function translates the given translation key using your language files:
echo trans('messages.welcome');
If the specified translation key does not exist, the trans
function will return the given key. So, using the example above, the trans
function would return messages.welcome
if the translation key does not exist.
trans_choice()
The trans_choice
function translates the given translation key with inflection:
echo trans_choice('messages.notifications', $unreadCount);
If the specified translation key does not exist, the trans_choice
function will return the given key. So, using the example above, the trans_choice
function would return messages.notifications
if the translation key does not exist.
Fluent Strings
Fluent strings provide a more fluent, object-oriented interface for working with string values, allowing you to chain multiple string operations together using a more readable syntax compared to traditional string operations.
after
The after
method returns everything after the given value in a string. The entire string will be returned if the value does not exist within the string:
use Illuminate\Support\Str;
$slice = Str::of('This is my name')->after('This is');
// ' my name'
afterLast
The afterLast
method returns everything after the last occurrence of the given value in a string. The entire string will be returned if the value does not exist within the string:
use Illuminate\Support\Str;
$slice = Str::of('App\Http\Controllers\Controller')->afterLast('\\');
// 'Controller'
apa
The apa
method converts the given string to title case following the APA guidelines:
use Illuminate\Support\Str;
$converted = Str::of('a nice title uses the correct case')->apa();
// A Nice Title Uses the Correct Case
append
The append
method appends the given values to the string:
use Illuminate\Support\Str;
$string = Str::of('Taylor')->append(' Otwell');
// 'Taylor Otwell'
ascii
The ascii
method will attempt to transliterate the string into an ASCII value:
use Illuminate\Support\Str;
$string = Str::of('ü')->ascii();
// 'u'
basename
The basename
method will return the trailing name component of the given string:
use Illuminate\Support\Str;
$string = Str::of('/foo/bar/baz')->basename();
// 'baz'
If needed, you may provide an "extension" that will be removed from the trailing component:
use Illuminate\Support\Str;
$string = Str::of('/foo/bar/baz.jpg')->basename('.jpg');
// 'baz'
before
The before
method returns everything before the given value in a string:
use Illuminate\Support\Str;
$slice = Str::of('This is my name')->before('my name');
// 'This is '
beforeLast
The beforeLast
method returns everything before the last occurrence of the given value in a string:
use Illuminate\Support\Str;
$slice = Str::of('This is my name')->beforeLast('is');
// 'This '
between
The between
method returns the portion of a string between two values:
use Illuminate\Support\Str;
$converted = Str::of('This is my name')->between('This', 'name');
// ' is my '
betweenFirst
The betweenFirst
method returns the smallest possible portion of a string between two values:
use Illuminate\Support\Str;
$converted = Str::of('[a] bc [d]')->betweenFirst('[', ']');
// 'a'
camel
The camel
method converts the given string to camelCase
:
use Illuminate\Support\Str;
$converted = Str::of('foo_bar')->camel();
// 'fooBar'
charAt
The charAt
method returns the character at the specified index. If the index is out of bounds, false
is returned:
use Illuminate\Support\Str;
$character = Str::of('This is my name.')->charAt(6);
// 's'
classBasename
The classBasename
method returns the class name of the given class with the class's namespace removed:
use Illuminate\Support\Str;
$class = Str::of('Foo\Bar\Baz')->classBasename();
// 'Baz'
chopStart
The chopStart
method removes the first occurrence of the given value only if the value appears at the start of the string:
use Illuminate\Support\Str;
$url = Str::of('https://laravel.com')->chopStart('https://');
// 'laravel.com'
You may also pass an array. If the string starts with any of the values in the array then that value will be removed from string:
use Illuminate\Support\Str;
$url = Str::of('http://laravel.com')->chopStart(['https://', 'http://']);
// 'laravel.com'
chopEnd
The chopEnd
method removes the last occurrence of the given value only if the value appears at the end of the string:
use Illuminate\Support\Str;
$url = Str::of('https://laravel.com')->chopEnd('.com');
// 'https://laravel'
You may also pass an array. If the string ends with any of the values in the array then that value will be removed from string:
use Illuminate\Support\Str;
$url = Str::of('http://laravel.com')->chopEnd(['.com', '.io']);
// 'http://laravel'
contains
The contains
method determines if the given string contains the given value. By default this method is case sensitive:
use Illuminate\Support\Str;
$contains = Str::of('This is my name')->contains('my');
// true
You may also pass an array of values to determine if the given string contains any of the values in the array:
use Illuminate\Support\Str;
$contains = Str::of('This is my name')->contains(['my', 'foo']);
// true
You can disable case sensitivity by setting the ignoreCase
argument to true
:
use Illuminate\Support\Str;
$contains = Str::of('This is my name')->contains('MY', ignoreCase: true);
// true
containsAll
The containsAll
method determines if the given string contains all of the values in the given array:
use Illuminate\Support\Str;
$containsAll = Str::of('This is my name')->containsAll(['my', 'name']);
// true
You can disable case sensitivity by setting the ignoreCase
argument to true
:
use Illuminate\Support\Str;
$containsAll = Str::of('This is my name')->containsAll(['MY', 'NAME'], ignoreCase: true);
// true
deduplicate
The deduplicate
method replaces consecutive instances of a character with a single instance of that character in the given string. By default, the method deduplicates spaces:
use Illuminate\Support\Str;
$result = Str::of('The Laravel Framework')->deduplicate();
// The Laravel Framework
You may specify a different character to deduplicate by passing it in as the second argument to the method:
use Illuminate\Support\Str;
$result = Str::of('The---Laravel---Framework')->deduplicate('-');
// The-Laravel-Framework
dirname
The dirname
method returns the parent directory portion of the given string:
use Illuminate\Support\Str;
$string = Str::of('/foo/bar/baz')->dirname();
// '/foo/bar'
If necessary, you may specify how many directory levels you wish to trim from the string:
use Illuminate\Support\Str;
$string = Str::of('/foo/bar/baz')->dirname(2);
// '/foo'
endsWith
The endsWith
method determines if the given string ends with the given value:
use Illuminate\Support\Str;
$result = Str::of('This is my name')->endsWith('name');
// true
You may also pass an array of values to determine if the given string ends with any of the values in the array:
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
The exactly
method determines if the given string is an exact match with another string:
use Illuminate\Support\Str;
$result = Str::of('Laravel')->exactly('Laravel');
// true
excerpt
The excerpt
method extracts an excerpt from the string that matches the first instance of a phrase within that string:
use Illuminate\Support\Str;
$excerpt = Str::of('This is my name')->excerpt('my', [
'radius' => 3
]);
// '...is my na...'
The radius
option, which defaults to 100
, allows you to define the number of characters that should appear on each side of the truncated string.
In addition, you may use the omission
option to change the string that will be prepended and appended to the truncated string:
use Illuminate\Support\Str;
$excerpt = Str::of('This is my name')->excerpt('name', [
'radius' => 3,
'omission' => '(...) '
]);
// '(...) my name'
explode
The explode
method splits the string by the given delimiter and returns a collection containing each section of the split string:
use Illuminate\Support\Str;
$collection = Str::of('foo bar baz')->explode(' ');
// collect(['foo', 'bar', 'baz'])
finish
The finish
method adds a single instance of the given value to a string if it does not already end with that value:
use Illuminate\Support\Str;
$adjusted = Str::of('this/string')->finish('/');
// this/string/
$adjusted = Str::of('this/string/')->finish('/');
// this/string/
headline
The headline
method will convert strings delimited by casing, hyphens, or underscores into a space delimited string with each word's first letter capitalized:
use Illuminate\Support\Str;
$headline = Str::of('taylor_otwell')->headline();
// Taylor Otwell
$headline = Str::of('EmailNotificationSent')->headline();
// Email Notification Sent
inlineMarkdown
The inlineMarkdown
method converts GitHub flavored Markdown into inline HTML using CommonMark. However, unlike the markdown
method, it does not wrap all generated HTML in a block-level element:
use Illuminate\Support\Str;
$html = Str::of('**Laravel**')->inlineMarkdown();
// <strong>Laravel</strong>
Markdown Security
By default, Markdown supports raw HTML, which will expose Cross-Site Scripting (XSS) vulnerabilities when used with raw user input. As per the CommonMark Security documentation, you may use the html_input
option to either escape or strip raw HTML, and the allow_unsafe_links
option to specify whether to allow unsafe links. If you need to allow some raw HTML, you should pass your compiled Markdown through an HTML Purifier:
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
The is
method determines if a given string matches a given pattern. Asterisks may be used as wildcard values
use Illuminate\Support\Str;
$matches = Str::of('foobar')->is('foo*');
// true
$matches = Str::of('foobar')->is('baz*');
// false
isAscii
The isAscii
method determines if a given string is an ASCII string:
use Illuminate\Support\Str;
$result = Str::of('Taylor')->isAscii();
// true
$result = Str::of('ü')->isAscii();
// false
isEmpty
The isEmpty
method determines if the given string is empty:
use Illuminate\Support\Str;
$result = Str::of(' ')->trim()->isEmpty();
// true
$result = Str::of('Laravel')->trim()->isEmpty();
// false
isNotEmpty
The isNotEmpty
method determines if the given string is not empty:
use Illuminate\Support\Str;
$result = Str::of(' ')->trim()->isNotEmpty();
// false
$result = Str::of('Laravel')->trim()->isNotEmpty();
// true
isJson
The isJson
method determines if a given string is valid 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
The isUlid
method determines if a given string is a ULID:
use Illuminate\Support\Str;
$result = Str::of('01gd6r360bp37zj17nxb55yv40')->isUlid();
// true
$result = Str::of('Taylor')->isUlid();
// false
isUrl
The isUrl
method determines if a given string is a URL:
use Illuminate\Support\Str;
$result = Str::of('http://example.com')->isUrl();
// true
$result = Str::of('Taylor')->isUrl();
// false
The isUrl
method considers a wide range of protocols as valid. However, you may specify the protocols that should be considered valid by providing them to the isUrl
method:
$result = Str::of('http://example.com')->isUrl(['http', 'https']);
isUuid
The isUuid
method determines if a given string is a UUID:
use Illuminate\Support\Str;
$result = Str::of('5ace9ab9-e9cf-4ec6-a19d-5881212a452c')->isUuid();
// true
$result = Str::of('Taylor')->isUuid();
// false
kebab
The kebab
method converts the given string to kebab-case
:
use Illuminate\Support\Str;
$converted = Str::of('fooBar')->kebab();
// foo-bar
lcfirst
The lcfirst
method returns the given string with the first character lowercased:
use Illuminate\Support\Str;
$string = Str::of('Foo Bar')->lcfirst();
// foo Bar
length
The length
method returns the length of the given string:
use Illuminate\Support\Str;
$length = Str::of('Laravel')->length();
// 7
limit
The limit
method truncates the given string to the specified length:
use Illuminate\Support\Str;
$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);
// The quick brown fox...
You may also pass a second argument to change the string that will be appended to the end of the truncated string:
$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20, ' (...)');
// The quick brown fox (...)
If you would like to preserve complete words when truncating the string, you may utilize the preserveWords
argument. When this argument is true
, the string will be truncated to the nearest complete word boundary:
$truncated = Str::of('The quick brown fox')->limit(12, preserveWords: true);
// The quick...
lower
The lower
method converts the given string to lowercase:
use Illuminate\Support\Str;
$result = Str::of('LARAVEL')->lower();
// 'laravel'
markdown
The markdown
method converts GitHub flavored Markdown into 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 Security
By default, Markdown supports raw HTML, which will expose Cross-Site Scripting (XSS) vulnerabilities when used with raw user input. As per the CommonMark Security documentation, you may use the html_input
option to either escape or strip raw HTML, and the allow_unsafe_links
option to specify whether to allow unsafe links. If you need to allow some raw HTML, you should pass your compiled Markdown through an HTML Purifier:
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
The mask
method masks a portion of a string with a repeated character, and may be used to obfuscate segments of strings such as email addresses and phone numbers:
use Illuminate\Support\Str;
$string = Str::of('taylor@example.com')->mask('*', 3);
// tay***************
If needed, you may provide negative numbers as the third or fourth argument to the mask
method, which will instruct the method to begin masking at the given distance from the end of the string:
$string = Str::of('taylor@example.com')->mask('*', -15, 3);
// tay***@example.com
$string = Str::of('taylor@example.com')->mask('*', 4, -4);
// tayl**********.com
match
The match
method will return the portion of a string that matches a given regular expression pattern:
use Illuminate\Support\Str;
$result = Str::of('foo bar')->match('/bar/');
// 'bar'
$result = Str::of('foo bar')->match('/foo (.*)/');
// 'bar'
matchAll
The matchAll
method will return a collection containing the portions of a string that match a given regular expression pattern:
use Illuminate\Support\Str;
$result = Str::of('bar foo bar')->matchAll('/bar/');
// collect(['bar', 'bar'])
If you specify a matching group within the expression, Laravel will return a collection of the first matching group's matches:
use Illuminate\Support\Str;
$result = Str::of('bar fun bar fly')->matchAll('/f(\w*)/');
// collect(['un', 'ly']);
If no matches are found, an empty collection will be returned.
isMatch
The isMatch
method will return true
if the string matches a given regular expression:
use Illuminate\Support\Str;
$result = Str::of('foo bar')->isMatch('/foo (.*)/');
// true
$result = Str::of('laravel')->isMatch('/foo (.*)/');
// false
newLine
The newLine
method appends an "end of line" character to a string:
use Illuminate\Support\Str;
$padded = Str::of('Laravel')->newLine()->append('Framework');
// 'Laravel
// Framework'
padBoth
The padBoth
method wraps PHP's str_pad
function, padding both sides of a string with another string until the final string reaches the desired length:
use Illuminate\Support\Str;
$padded = Str::of('James')->padBoth(10, '_');
// '__James___'
$padded = Str::of('James')->padBoth(10);
// ' James '
padLeft
The padLeft
method wraps PHP's str_pad
function, padding the left side of a string with another string until the final string reaches the desired length:
use Illuminate\Support\Str;
$padded = Str::of('James')->padLeft(10, '-=');
// '-=-=-James'
$padded = Str::of('James')->padLeft(10);
// ' James'
padRight
The padRight
method wraps PHP's str_pad
function, padding the right side of a string with another string until the final string reaches the desired length:
use Illuminate\Support\Str;
$padded = Str::of('James')->padRight(10, '-');
// 'James-----'
$padded = Str::of('James')->padRight(10);
// 'James '
pipe
The pipe
method allows you to transform the string by passing its current value to the given callable:
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
The plural
method converts a singular word string to its plural form. This function supports any of the languages support by Laravel's pluralizer:
use Illuminate\Support\Str;
$plural = Str::of('car')->plural();
// cars
$plural = Str::of('child')->plural();
// children
You may provide an integer as a second argument to the function to retrieve the singular or plural form of the string:
use Illuminate\Support\Str;
$plural = Str::of('child')->plural(2);
// children
$plural = Str::of('child')->plural(1);
// child
position
The position
method returns the position of the first occurrence of a substring in a string. If the substring does not exist within the string, false
is returned:
use Illuminate\Support\Str;
$position = Str::of('Hello, World!')->position('Hello');
// 0
$position = Str::of('Hello, World!')->position('W');
// 7
prepend
The prepend
method prepends the given values onto the string:
use Illuminate\Support\Str;
$string = Str::of('Framework')->prepend('Laravel ');
// Laravel Framework
remove
The remove
method removes the given value or array of values from the string:
use Illuminate\Support\Str;
$string = Str::of('Arkansas is quite beautiful!')->remove('quite');
// Arkansas is beautiful!
You may also pass false
as a second parameter to ignore case when removing strings.
repeat
The repeat
method repeats the given string:
use Illuminate\Support\Str;
$repeated = Str::of('a')->repeat(5);
// aaaaa
replace
The replace
method replaces a given string within the string:
use Illuminate\Support\Str;
$replaced = Str::of('Laravel 6.x')->replace('6.x', '7.x');
// Laravel 7.x
The replace
method also accepts a caseSensitive
argument. By default, the replace
method is case sensitive:
$replaced = Str::of('macOS 13.x')->replace(
'macOS', 'iOS', caseSensitive: false
);
replaceArray
The replaceArray
method replaces a given value in the string sequentially using an array:
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
The replaceFirst
method replaces the first occurrence of a given value in a string:
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
The replaceLast
method replaces the last occurrence of a given value in a string:
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
The replaceMatches
method replaces all portions of a string matching a pattern with the given replacement string:
use Illuminate\Support\Str;
$replaced = Str::of('(+1) 501-555-1000')->replaceMatches('/[^A-Za-z0-9]++/', '')
// '15015551000'
The replaceMatches
method also accepts a closure that will be invoked with each portion of the string matching the given pattern, allowing you to perform the replacement logic within the closure and return the replaced value:
use Illuminate\Support\Str;
$replaced = Str::of('123')->replaceMatches('/\d/', function (array $matches) {
return '['.$matches[0].']';
});
// '[1][2][3]'
replaceStart
The replaceStart
method replaces the first occurrence of the given value only if the value appears at the start of the string:
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
The replaceEnd
method replaces the last occurrence of the given value only if the value appears at the end of the string:
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
The scan
method parses input from a string into a collection according to a format supported by the sscanf
PHP function:
use Illuminate\Support\Str;
$collection = Str::of('filename.jpg')->scan('%[^.].%s');
// collect(['filename', 'jpg'])
singular
The singular
method converts a string to its singular form. This function supports any of the languages support by Laravel's pluralizer:
use Illuminate\Support\Str;
$singular = Str::of('cars')->singular();
// car
$singular = Str::of('children')->singular();
// child
slug
The slug
method generates a URL friendly "slug" from the given string:
use Illuminate\Support\Str;
$slug = Str::of('Laravel Framework')->slug('-');
// laravel-framework
snake
The snake
method converts the given string to snake_case
:
use Illuminate\Support\Str;
$converted = Str::of('fooBar')->snake();
// foo_bar
split
The split
method splits a string into a collection using a regular expression:
use Illuminate\Support\Str;
$segments = Str::of('one, two, three')->split('/[\s,]+/');
// collect(["one", "two", "three"])
squish
The squish
method removes all extraneous white space from a string, including extraneous white space between words:
use Illuminate\Support\Str;
$string = Str::of(' laravel framework ')->squish();
// laravel framework
start
The start
method adds a single instance of the given value to a string if it does not already start with that value:
use Illuminate\Support\Str;
$adjusted = Str::of('this/string')->start('/');
// /this/string
$adjusted = Str::of('/this/string')->start('/');
// /this/string
startsWith
The startsWith
method determines if the given string begins with the given value:
use Illuminate\Support\Str;
$result = Str::of('This is my name')->startsWith('This');
// true
stripTags
The stripTags
method removes all HTML and PHP tags from a string:
use Illuminate\Support\Str;
$result = Str::of('<a href="https://laravel.com">Taylor <b>Otwell</b></a>')->stripTags();
// Taylor Otwell
$result = Str::of('<a href="https://laravel.com">Taylor <b>Otwell</b></a>')->stripTags('<b>');
// Taylor <b>Otwell</b>
studly
The studly
method converts the given string to StudlyCase
:
use Illuminate\Support\Str;
$converted = Str::of('foo_bar')->studly();
// FooBar
substr
The substr
method returns the portion of the string specified by the given start and length parameters:
use Illuminate\Support\Str;
$string = Str::of('Laravel Framework')->substr(8);
// Framework
$string = Str::of('Laravel Framework')->substr(8, 5);
// Frame
substrReplace
The substrReplace
method replaces text within a portion of a string, starting at the position specified by the second argument and replacing the number of characters specified by the third argument. Passing 0
to the method's third argument will insert the string at the specified position without replacing any of the existing characters in the string:
use Illuminate\Support\Str;
$string = Str::of('1300')->substrReplace(':', 2);
// 13:
$string = Str::of('The Framework')->substrReplace(' Laravel', 3, 0);
// The Laravel Framework
swap
The swap
method replaces multiple values in the string using PHP's strtr
function:
use Illuminate\Support\Str;
$string = Str::of('Tacos are great!')
->swap([
'Tacos' => 'Burritos',
'great' => 'fantastic',
]);
// Burritos are fantastic!
take
The take
method returns a specified number of characters from the beginning of the string:
use Illuminate\Support\Str;
$taken = Str::of('Build something amazing!')->take(5);
// Build
tap
The tap
method passes the string to the given closure, allowing you to examine and interact with the string while not affecting the string itself. The original string is returned by the tap
method regardless of what is returned by the closure:
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
The test
method determines if a string matches the given regular expression pattern:
use Illuminate\Support\Str;
$result = Str::of('Laravel Framework')->test('/Laravel/');
// true
title
The title
method converts the given string to 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
The toBase64
method converts the given string to Base64:
use Illuminate\Support\Str;
$base64 = Str::of('Laravel')->toBase64();
// TGFyYXZlbA==
toHtmlString
The toHtmlString
method converts the given string to an instance of Illuminate\Support\HtmlString
, which will not be escaped when rendered in Blade templates:
use Illuminate\Support\Str;
$htmlString = Str::of('Nuno Maduro')->toHtmlString();
toUri
The toUri
method converts the given string to an instance of Illuminate\Support\Uri:
use Illuminate\Support\Str;
$uri = Str::of('https://example.com')->toUri();
transliterate
The transliterate
method will attempt to convert a given string into its closest ASCII representation:
use Illuminate\Support\Str;
$email = Str::of('ⓣⓔⓢⓣ@ⓛⓐⓡⓐⓥⓔⓛ.ⓒⓞⓜ')->transliterate()
// 'test@laravel.com'
trim
The trim
method trims the given string. Unlike PHP's native trim
function, Laravel's trim
method also removes unicode whitespace characters:
use Illuminate\Support\Str;
$string = Str::of(' Laravel ')->trim();
// 'Laravel'
$string = Str::of('/Laravel/')->trim('/');
// 'Laravel'
ltrim
The ltrim
method trims the left side of the string. Unlike PHP's native ltrim
function, Laravel's ltrim
method also removes unicode whitespace characters:
use Illuminate\Support\Str;
$string = Str::of(' Laravel ')->ltrim();
// 'Laravel '
$string = Str::of('/Laravel/')->ltrim('/');
// 'Laravel/'
rtrim
The rtrim
method trims the right side of the given string. Unlike PHP's native rtrim
function, Laravel's rtrim
method also removes unicode whitespace characters:
use Illuminate\Support\Str;
$string = Str::of(' Laravel ')->rtrim();
// ' Laravel'
$string = Str::of('/Laravel/')->rtrim('/');
// '/Laravel'
ucfirst
The ucfirst
method returns the given string with the first character capitalized:
use Illuminate\Support\Str;
$string = Str::of('foo bar')->ucfirst();
// Foo bar
ucsplit
The ucsplit
method splits the given string into a collection by uppercase characters:
use Illuminate\Support\Str;
$string = Str::of('Foo Bar')->ucsplit();
// collect(['Foo', 'Bar'])
unwrap
The unwrap
method removes the specified strings from the beginning and end of a given string:
use Illuminate\Support\Str;
Str::of('-Laravel-')->unwrap('-');
// Laravel
Str::of('{framework: "Laravel"}')->unwrap('{', '}');
// framework: "Laravel"
upper
The upper
method converts the given string to uppercase:
use Illuminate\Support\Str;
$adjusted = Str::of('laravel')->upper();
// LARAVEL
when
The when
method invokes the given closure if a given condition is true
. The closure will receive the fluent string instance:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('Taylor')
->when(true, function (Stringable $string) {
return $string->append(' Otwell');
});
// 'Taylor Otwell'
If necessary, you may pass another closure as the third parameter to the when
method. This closure will execute if the condition parameter evaluates to false
.
whenContains
The whenContains
method invokes the given closure if the string contains the given value. The closure will receive the fluent string instance:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('tony stark')
->whenContains('tony', function (Stringable $string) {
return $string->title();
});
// 'Tony Stark'
If necessary, you may pass another closure as the third parameter to the when
method. This closure will execute if the string does not contain the given value.
You may also pass an array of values to determine if the given string contains any of the values in the array:
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
The whenContainsAll
method invokes the given closure if the string contains all of the given sub-strings. The closure will receive the fluent string instance:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('tony stark')
->whenContainsAll(['tony', 'stark'], function (Stringable $string) {
return $string->title();
});
// 'Tony Stark'
If necessary, you may pass another closure as the third parameter to the when
method. This closure will execute if the condition parameter evaluates to false
.
whenEmpty
The whenEmpty
method invokes the given closure if the string is empty. If the closure returns a value, that value will also be returned by the whenEmpty
method. If the closure does not return a value, the fluent string instance will be returned:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of(' ')->trim()->whenEmpty(function (Stringable $string) {
return $string->prepend('Laravel');
});
// 'Laravel'
whenNotEmpty
The whenNotEmpty
method invokes the given closure if the string is not empty. If the closure returns a value, that value will also be returned by the whenNotEmpty
method. If the closure does not return a value, the fluent string instance will be returned:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('Framework')->whenNotEmpty(function (Stringable $string) {
return $string->prepend('Laravel ');
});
// 'Laravel Framework'
whenStartsWith
The whenStartsWith
method invokes the given closure if the string starts with the given sub-string. The closure will receive the fluent string instance:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('disney world')->whenStartsWith('disney', function (Stringable $string) {
return $string->title();
});
// 'Disney World'
whenEndsWith
The whenEndsWith
method invokes the given closure if the string ends with the given sub-string. The closure will receive the fluent string instance:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('disney world')->whenEndsWith('world', function (Stringable $string) {
return $string->title();
});
// 'Disney World'
whenExactly
The whenExactly
method invokes the given closure if the string exactly matches the given string. The closure will receive the fluent string instance:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('laravel')->whenExactly('laravel', function (Stringable $string) {
return $string->title();
});
// 'Laravel'
whenNotExactly
The whenNotExactly
method invokes the given closure if the string does not exactly match the given string. The closure will receive the fluent string instance:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('framework')->whenNotExactly('laravel', function (Stringable $string) {
return $string->title();
});
// 'Framework'
whenIs
The whenIs
method invokes the given closure if the string matches a given pattern. Asterisks may be used as wildcard values. The closure will receive the fluent string instance:
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
The whenIsAscii
method invokes the given closure if the string is 7 bit ASCII. The closure will receive the fluent string instance:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('laravel')->whenIsAscii(function (Stringable $string) {
return $string->title();
});
// 'Laravel'
whenIsUlid
The whenIsUlid
method invokes the given closure if the string is a valid ULID. The closure will receive the fluent string instance:
use Illuminate\Support\Str;
$string = Str::of('01gd6r360bp37zj17nxb55yv40')->whenIsUlid(function (Stringable $string) {
return $string->substr(0, 8);
});
// '01gd6r36'
whenIsUuid
The whenIsUuid
method invokes the given closure if the string is a valid UUID. The closure will receive the fluent string instance:
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
The whenTest
method invokes the given closure if the string matches the given regular expression. The closure will receive the fluent string instance:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('laravel framework')->whenTest('/laravel/', function (Stringable $string) {
return $string->title();
});
// 'Laravel Framework'
wordCount
The wordCount
method returns the number of words that a string contains:
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!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: