문자열 (Strings)
소개
라라벨은 문자열 값을 조작할 수 있는 다양한 함수를 제공합니다. 이 함수들 중 상당수는 프레임워크 내부적으로도 사용되고 있지만, 여러분이 필요하다고 생각한다면 언제든지 자신의 애플리케이션에서도 자유롭게 활용할 수 있습니다.
사용 가능한 메서드
문자열 메서드
__ class_basename e preg_replace_array Str::after Str::afterLast Str::apa Str::ascii Str::before Str::beforeLast Str::between Str::betweenFirst Str::camel Str::charAt Str::contains Str::containsAll 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::ucfirst Str::ucsplit Str::upper Str::ulid Str::unwrap Str::uuid 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 contains containsAll dirname endsWith excerpt exactly explode finish headline inlineMarkdown is isAscii isEmpty isNotEmpty isJson isUlid isUrl isUuid kebab lcfirst length limit lower ltrim markdown mask match matchAll isMatch newLine padBoth padLeft padRight pipe plural position prepend remove repeat replace replaceArray replaceFirst replaceLast replaceMatches replaceStart replaceEnd rtrim scan singular slug snake split squish start startsWith stripTags studly substr substrReplace swap take tap test title toBase64 trim ucfirst ucsplit unwrap upper when whenContains whenContainsAll whenEmpty whenNotEmpty whenStartsWith whenEndsWith whenExactly whenNotExactly whenIs whenIsAscii whenIsUlid whenIsUuid whenTest wordCount words
문자열
__()
__ 함수는 주어진 번역 문자열 또는 번역 키를 언어 파일을 사용해 번역합니다.
echo __('Welcome to our application');
echo __('messages.welcome');
만약 지정한 번역 문자열이나 키가 존재하지 않는 경우, __ 함수는 전달된 값을 그대로 반환합니다. 즉, 위의 예시에서 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::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
Str::containsAll()
Str::containsAll 메서드는 주어진 문자열에 배열로 전달된 모든 값이 포함되어 있는지 판별합니다.
use Illuminate\Support\Str;
$containsAll = Str::containsAll('This is my name', ['my', 'name']);
// true
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 메서드는 GitHub 스타일의 마크다운을 CommonMark를 이용해 인라인 HTML로 변환합니다. 단, markdown 메서드와 달리 생성된 HTML 전체를 블록 레벨 요소로 감싸지 않습니다.
use Illuminate\Support\Str;
$html = Str::inlineMarkdown('**Laravel**');
// <strong>Laravel</strong>
마크다운 보안
기본적으로 마크다운은 순수 HTML을 지원합니다. 그러나 사용자 입력을 그대로 사용할 경우, 이는 교차 사이트 스크립팅(XSS) 취약점에 노출될 수 있습니다. CommonMark 보안 문서에 따르면, html_input 옵션을 사용해 순수 HTML을 이스케이프하거나 제거(stript)할 수 있고, allow_unsafe_links 옵션으로 위험한 링크 허용 여부를 지정할 수 있습니다. 만약 일부 순수 HTML만 허용해야 한다면, 마크다운이 변환된 결과를 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
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 = 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...
문자열이 잘렸을 때 끝에 추가할 문자열을 세 번째 인수로 지정할 수 있습니다.
use Illuminate\Support\Str;
$truncated = Str::limit('The quick brown fox jumps over the lazy dog', 20, ' (...)');
// The quick brown fox (...)
Str::lower()
Str::lower 메서드는 주어진 문자열을 모두 소문자로 변환합니다.
use Illuminate\Support\Str;
$converted = Str::lower('LARAVEL');
// laravel
Str::markdown()
Str::markdown 메서드는 GitHub 스타일의 Markdown을 CommonMark를 사용하여 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은 원시 HTML을 지원하기 때문에, 사용자 입력값에 직접 사용할 경우 교차 사이트 스크립팅(XSS) 취약점이 발생할 수 있습니다. CommonMark의 보안 문서에 따르면, html_input 옵션을 사용해 원시 HTML을 이스케이프하거나 제거할 수 있고, allow_unsafe_links 옵션을 사용해 안전하지 않은 링크의 허용 여부를 지정할 수 있습니다. 반드시 일부의 원시 HTML만 허용해야 한다면, 컴파일된 마크다운을 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('[email protected]', '*', 3);
// tay***************
세 번째 인수로 음수를 전달하면, 문자열 끝에서부터 마스킹이 시작됩니다.
$string = Str::mask('[email protected]', '*', -15, 3);
// tay***@example.com
Str::orderedUuid()
Str::orderedUuid 메서드는 "타임스탬프 우선" UUID를 생성합니다. 이 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 메서드는 단수형 단어를 복수형으로 변환합니다. 이 함수는 라라벨의 복수화 도구가 지원하는 언어 모두에서 동작합니다.
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 메서드는 StudlyCaps(첫 글자가 대문자인 형태)의 단어를 복수형으로 변환합니다. 이 함수 역시 라라벨의 복수화 도구가 지원하는 언어 모두에서 사용할 수 있습니다.
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 메서드를 사용할 수 있습니다.
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를 전달하면, 대소문자를 구분하지 않고 문자열을 제거할 수 있습니다.
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 8.x';
$replaced = Str::replace('8.x', '9.x', $string);
// Laravel 9.x
이 메서드는 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 메서드는 문자열을 단수형으로 변환합니다. 이 함수는 라라벨의 복수화 기능에서 지원하는 모든 언어를 지원합니다.
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 메서드는 지정한 시작 위치와 길이에 따라 해당 부분 문자열을 반환합니다.
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::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(Compact, 시간 순서가 보장되는 고유 식별자)를 생성합니다.
use Illuminate\Support\Str;
return (string) Str::ulid();
// 01gd6r360bp37zj17nxb55yv40
생성된 ULID의 생성 일시를 나타내는 Illuminate\Support\Carbon 날짜 인스턴스를 얻으려면, 라라벨의 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 값 생성 방식을 원래대로 되돌리고 싶다면, 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 값 생성 방식을 일반적인 방식으로 되돌리고 싶다면 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'
인자를 전달하지 않으면, 이 함수는 Illuminate\Support\Str 인스턴스를 반환합니다.
$snake = str()->snake('FooBar');
// 'foo_bar'
trans()
trans 함수는 지정한 번역 키를 사용하여 언어 파일에서 해당 텍스트를 번역해 반환합니다.
echo trans('messages.welcome');
지정한 번역 키가 존재하지 않으면, trans 함수는 전달한 키 자체를 반환합니다. 즉, 위 예시에서 해당 키가 없다면 messages.welcome을 그대로 반환합니다.
trans_choice()
trans_choice 함수는 변환 키에 맞게 복수/단수 등 어형을 적용하여 번역합니다.
echo trans_choice('messages.notifications', $unreadCount);
지정한 키가 없다면, 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'
필요하다면 확장자(예: .jpg)를 인자로 전달하여 마지막 컴포넌트에서 확장자를 제거할 수도 있습니다.
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'
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
containsAll
containsAll 메서드는 주어진 문자열이, 전달된 배열 내 모든 값을 포함하는지 판별합니다.
use Illuminate\Support\Str;
$containsAll = Str::of('This is my name')->containsAll(['my', 'name']);
// true
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'
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'
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
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 메서드는 GitHub 스타일의 마크다운(Markdown)을 CommonMark를 이용해 인라인 HTML로 변환합니다. 하지만 markdown 메서드와 달리, 변환된 HTML을 블록 레벨 요소로 래핑하지는 않습니다.
use Illuminate\Support\Str;
$html = Str::of('**Laravel**')->inlineMarkdown();
// <strong>Laravel</strong>
마크다운 보안
기본적으로 마크다운은 원시 HTML을 지원하므로, 사용자로부터 입력받은 원본에 대해 사용할 경우 Cross-Site Scripting(XSS) 취약점을 노출할 수 있습니다. CommonMark의 보안 문서에서는 html_input 옵션을 사용해 원시 HTML을 escaping 또는 제거하도록, 그리고 allow_unsafe_links 옵션을 통해 안전하지 않은 링크의 허용 여부를 지정할 수 있다고 명시하고 있습니다. 일부 원시 HTML만 허용해야 한다면, 변환된 마크다운을 반드시 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
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 메서드는 다양한 종류의 프로토콜을 허용합니다. 하지만, 인자로 허용할 프로토콜 목록을 전달하여 제한할 수도 있습니다.
$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...
잘린 문자열 끝에 추가될 문자열을 두 번째 인자로 지정할 수도 있습니다.
use Illuminate\Support\Str;
$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20, ' (...)');
// The quick brown fox (...)
lower
lower 메서드는 주어진 문자열을 모두 소문자로 변환합니다.
use Illuminate\Support\Str;
$result = Str::of('LARAVEL')->lower();
// 'laravel'
ltrim
ltrim 메서드는 문자열 왼쪽(앞) 부분의 공백이나 지정한 문자를 제거합니다.
use Illuminate\Support\Str;
$string = Str::of(' Laravel ')->ltrim();
// 'Laravel '
$string = Str::of('/Laravel/')->ltrim('/');
// 'Laravel/'
markdown
markdown 메서드는 GitHub 스타일의 마크다운을 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>
마크다운 보안
기본적으로 마크다운은 원시 HTML을 지원하므로, 사용자로부터 입력받은 원본에 대해 사용할 경우 Cross-Site Scripting(XSS) 취약점을 노출할 수 있습니다. CommonMark의 보안 문서에서는 html_input 옵션을 사용해 원시 HTML을 escaping 또는 제거하도록, 그리고 allow_unsafe_links 옵션을 통해 안전하지 않은 링크의 허용 여부를 지정할 수 있다고 명시하고 있습니다. 일부 원시 HTML만 허용해야 한다면, 변환된 마크다운을 반드시 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
mask 메서드는 문자열 일부를 반복 문자로 마스킹(가림)하여, 이메일 주소나 전화번호 등 민감한 정보의 일부를 가릴 때 사용할 수 있습니다.
use Illuminate\Support\Str;
$string = Str::of('[email protected]')->mask('*', 3);
// tay***************
필요하다면, 세 번째 또는 네 번째 인자에 음수 값을 지정하여, 문자열 끝에서부터 거리를 기준으로 마스킹을 시작하도록 할 수 있습니다.
$string = Str::of('[email protected]')->mask('*', -15, 3);
// tay***@example.com
$string = Str::of('[email protected]')->mask('*', 4, -4);
// 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'])
표현식 내에 매칭 그룹을 지정하면, 라라벨은 해당 그룹에 대응되는 모든 값을 컬렉션으로 반환합니다.
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 메서드는 단수 형태의 단어를 복수 형태로 변환합니다. 이 함수는 라라벨의 복수화 지원 언어에서도 사용할 수 있습니다.
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 옵션도 지원합니다. 기본적으로는 대소문자를 구분하여 치환합니다.
$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
rtrim
rtrim 메서드는 문자열의 오른쪽 끝에 있는 공백(또는 지정된 문자를) 제거합니다.
use Illuminate\Support\Str;
$string = Str::of(' Laravel ')->rtrim();
// ' Laravel'
$string = Str::of('/Laravel/')->rtrim('/');
// '/Laravel'
scan
scan 메서드는 sscanf PHP 함수에서 지원하는 형식에 따라 입력 문자열을 파싱해서 컬렉션으로 반환합니다.
use Illuminate\Support\Str;
$collection = Str::of('filename.jpg')->scan('%[^.].%s');
// collect(['filename', 'jpg'])
singular
singular 메서드는 문자열을 단수 형태로 변환합니다. 이 함수는 라라벨의 복수화 지원 언어에서도 사용할 수 있습니다.
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.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
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==
trim
trim 메서드는 주어진 문자열의 양쪽 끝에 있는 공백이나 지정한 문자를 제거합니다:
use Illuminate\Support\Str;
$string = Str::of(' Laravel ')->trim();
// 'Laravel'
$string = Str::of('/Laravel/')->trim('/');
// '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
when 메서드는 지정한 조건이 true일 때 주어진 클로저를 실행합니다. 이 클로저는 fluent string 인스턴스를 인수로 받습니다:
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 메서드는 문자열이 지정한 값을 포함하는 경우, 주어진 클로저를 실행합니다. 이 클로저는 fluent string 인스턴스를 인수로 받습니다:
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 메서드는 문자열이 지정한 모든 하위 문자열을 포함하고 있을 때 주어진 클로저를 실행합니다. 이 클로저는 fluent string 인스턴스를 인수로 받습니다:
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의 반환값이 됩니다. 클로저가 값을 반환하지 않을 경우, fluent string 인스턴스가 반환됩니다:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of(' ')->whenEmpty(function (Stringable $string) {
return $string->trim()->prepend('Laravel');
});
// 'Laravel'
whenNotEmpty
whenNotEmpty 메서드는 문자열이 비어 있지 않을 때 주어진 클로저를 실행합니다. 클로저가 값을 반환하면, 그 값이 whenNotEmpty의 반환값이 됩니다. 클로저가 값을 반환하지 않을 경우, fluent string 인스턴스가 반환됩니다:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('Framework')->whenNotEmpty(function (Stringable $string) {
return $string->prepend('Laravel ');
});
// 'Laravel Framework'
whenStartsWith
whenStartsWith 메서드는 문자열이 지정한 하위 문자열로 시작할 때 주어진 클로저를 실행합니다. 이 클로저는 fluent string 인스턴스를 인수로 받습니다:
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 메서드는 문자열이 지정한 하위 문자열로 끝날 때 주어진 클로저를 실행합니다. 이 클로저는 fluent string 인스턴스를 인수로 받습니다:
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 메서드는 문자열이 지정한 문자열과 정확하게 일치할 때 주어진 클로저를 실행합니다. 이 클로저는 fluent string 인스턴스를 인수로 받습니다:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('laravel')->whenExactly('laravel', function (Stringable $string) {
return $string->title();
});
// 'Laravel'
whenNotExactly
whenNotExactly 메서드는 문자열이 지정한 문자열과 정확히 일치하지 않을 때 주어진 클로저를 실행합니다. 이 클로저는 fluent string 인스턴스를 인수로 받습니다:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('framework')->whenNotExactly('laravel', function (Stringable $string) {
return $string->title();
});
// 'Framework'
whenIs
whenIs 메서드는 문자열이 지정한 패턴과 일치할 때 주어진 클로저를 실행합니다. 별표(*)는 와일드카드 값으로 사용할 수 있습니다. 이 클로저는 fluent string 인스턴스를 인수로 받습니다:
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
whenIsAscii 메서드는 문자열이 7비트 ASCII 문자로만 이루어져 있을 때 주어진 클로저를 실행합니다. 이 클로저는 fluent string 인스턴스를 인수로 받습니다:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('laravel')->whenIsAscii(function (Stringable $string) {
return $string->title();
});
// 'Laravel'
whenIsUlid
whenIsUlid 메서드는 문자열이 올바른 ULID 형식일 때 주어진 클로저를 실행합니다. 이 클로저는 fluent string 인스턴스를 인수로 받습니다:
use Illuminate\Support\Str;
$string = Str::of('01gd6r360bp37zj17nxb55yv40')->whenIsUlid(function (Stringable $string) {
return $string->substr(0, 8);
});
// '01gd6r36'
whenIsUuid
whenIsUuid 메서드는 문자열이 올바른 UUID 형식일 때 주어진 클로저를 실행합니다. 이 클로저는 fluent string 인스턴스를 인수로 받습니다:
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 메서드는 문자열이 주어진 정규 표현식과 일치할 때 주어진 클로저를 실행합니다. 이 클로저는 fluent string 인스턴스를 인수로 받습니다:
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 >>>