Documentation Index Fetch the complete documentation index at: https://kawax.biz/llms.txt
Use this file to discover all available pages before exploring further.
Str クラスとは
Illuminate\Support\Str クラスは、文字列操作のための豊富なメソッドを提供します。PHPの標準文字列関数を個別に呼ぶ代わりに、統一されたインターフェースで直感的に文字列を処理できます。
Laravelの文字列操作には2つのスタイルがあります。
静的メソッドスタイル : Str::slug($title, '-') — 単発の操作に向いています
Fluentスタイル(メソッドチェーン) : Str::of($title)->slug('-')->limit(50) — 複数の操作をつなげて書けます
use Illuminate\Support\ Str ;
// 静的メソッド
$slug = Str :: slug ( 'My New Blog Post' , '-' );
// 'my-new-blog-post'
// Fluent(Str::of)
$result = Str :: of ( ' My New Blog Post: Part 1 ' )
-> trim ()
-> slug ( '-' )
-> limit ( 30 );
// 'my-new-blog-post-part-1'
str() グローバルヘルパー関数は Str::of() と同等です。str('hello')->upper() のように書けます。
ケース変換
文字列のケース(大文字・小文字・記法)を変換するメソッドです。データベースのカラム名やAPIレスポンスのキー変換でよく使います。
Str::camel() / Str::snake() / Str::kebab() / Str::studly()
use Illuminate\Support\ Str ;
// camelCase(先頭小文字)
Str :: camel ( 'foo_bar' ); // 'fooBar'
Str :: camel ( 'user_profile_id' ); // 'userProfileId'
// snake_case
Str :: snake ( 'fooBar' ); // 'foo_bar'
Str :: snake ( 'UserProfile' ); // 'user_profile'
// kebab-case
Str :: kebab ( 'fooBar' ); // 'foo-bar'
// StudlyCase(PascalCase)
Str :: studly ( 'foo_bar' ); // 'FooBar'
Str :: studly ( 'user-profile' ); // 'UserProfile'
Str::lower() / Str::upper() / Str::title()
use Illuminate\Support\ Str ;
Str :: lower ( 'LARAVEL' ); // 'laravel'
Str :: upper ( 'laravel' ); // 'LARAVEL'
Str :: title ( 'hello world' ); // 'Hello World'
スラッグとURL
Str::slug() — URLフレンドリーなスラッグを生成
記事やページのURLを生成するときに必須のメソッドです。スペースや特殊文字を変換し、URLに安全な文字列を作ります。
use Illuminate\Support\ Str ;
Str :: slug ( 'Laravel フレームワーク' , '-' );
// 'laravel'(日本語はASCIIに変換されないため除去される)
Str :: slug ( 'My New Blog Post' , '-' );
// 'my-new-blog-post'
Str :: slug ( 'Hello World!' , '_' );
// 'hello_world'
日本語を含む場合はスラッグが空になることがあります。日本語のスラッグを使いたい場合は、別途ローマ字変換ライブラリを組み合わせるか、IDやタイムスタンプをURLに使うことを検討してください。
Str::of() でスラッグ生成からバリデーションまで一括処理
use Illuminate\Support\ Str ;
$title = ' My New Blog Post: Part 1! ' ;
$slug = Str :: of ( $title )
-> trim ()
-> slug ( '-' )
-> limit ( 50 );
// 'my-new-blog-post-part-1'
文字列の切り詰め
Str::limit() — 文字数で切り詰める
記事の本文やコメントを一覧表示するときにプレビューテキストを生成するメソッドです。
use Illuminate\Support\ Str ;
$text = 'Laravelは美しいWebアプリケーションを作るためのPHPフレームワークです。' ;
// 20文字で切り詰め(デフォルトで末尾に "..." を追加)
Str :: limit ( $text , 20 );
// 'Laravelは美しいWebアプリケー...'
// 末尾文字列をカスタマイズ
Str :: limit ( $text , 20 , ' → 続きを読む' );
// 'Laravelは美しいWebアプリケー → 続きを読む'
// 単語の途中で切らない(英語テキスト向け)
Str :: limit ( 'The quick brown fox jumps over the lazy dog' , 20 , preserveWords : true );
// 'The quick brown fox...'
Str::words() — 単語数で切り詰める
use Illuminate\Support\ Str ;
Str :: words ( 'Perfectly balanced, as all things should be.' , 3 , ' >>>' );
// 'Perfectly balanced, as >>>'
文字列の検索と確認
Str::contains() — 文字列を含むか確認
use Illuminate\Support\ Str ;
Str :: contains ( 'This is my name' , 'my' );
// true
// 配列で複数の候補をチェック(いずれかを含む)
Str :: contains ( 'This is my name' , [ 'my' , 'your' ]);
// true
// 大文字・小文字を無視
Str :: contains ( 'This is my name' , 'MY' , ignoreCase : true );
// true
Str::startsWith() / Str::endsWith()
use Illuminate\Support\ Str ;
Str :: startsWith ( 'https://laravel.com' , 'https://' );
// true
Str :: startsWith ( 'https://laravel.com' , [ 'https://' , 'http://' ]);
// true
Str :: endsWith ( 'photo.jpg' , '.jpg' );
// true
Str :: endsWith ( 'photo.jpg' , [ '.jpg' , '.png' , '.gif' ]);
// true
Str::is() — ワイルドカードパターンマッチ
use Illuminate\Support\ Str ;
Str :: is ( 'foo*' , 'foobar' );
// true
Str :: is ( '*/user/*' , '/admin/user/profile' );
// true
// 大文字・小文字を無視
Str :: is ( 'F*' , 'foo' , ignoreCase : true );
// true
文字列の変換と置換
Str::replace() — 文字列を置換
use Illuminate\Support\ Str ;
Str :: replace ( '8.x' , '13.x' , 'Laravel 8.x' );
// 'Laravel 13.x'
// 大文字・小文字を無視して置換
Str :: replace ( 'laravel' , 'Symphony' , 'I love Laravel' , caseSensitive : false );
// 'I love Symphony'
Str::replaceArray() — 配列で順番に置換
use Illuminate\Support\ Str ;
$string = '予定は ? から ? まで' ;
$result = Str :: replaceArray ( '?' , [ '午前9時' , '午後5時' ], $string );
// '予定は 午前9時 から 午後5時 まで'
Str::replaceMatches() — 正規表現で置換
use Illuminate\Support\ Str ;
// 電話番号から数字以外を除去
Str :: replaceMatches ( '/[^0-9]/' , '' , '(03) 1234-5678' );
// '0312345678'
// クロージャで置換内容を動的に生成
Str :: replaceMatches ( '/ \d + /' , fn ( $matches ) => '[' . $matches [ 0 ] . ']' , '1つ 2個 3本' );
// '[1]つ [2]個 [3]本'
Str::remove() — 文字列を削除
use Illuminate\Support\ Str ;
Str :: remove ( 'e' , 'Peter Piper picked a peck of pickled peppers.' );
// 'Ptr Pipr pickd a pck of pickld ppprs.'
// 配列で複数文字列を削除
Str :: remove ([ 'foo' , 'bar' ], 'foo and bar and baz' );
// ' and and baz'
Str::squish() — 余分な空白を除去
use Illuminate\Support\ Str ;
Str :: squish ( ' Laravel Framework ' );
// 'Laravel Framework'
文字列の前後操作
Str::before() / Str::after()
use Illuminate\Support\ Str ;
// 指定文字列より前の部分
Str :: before ( '[email protected] ' , '@' );
// 'test'
// 指定文字列より後の部分
Str :: after ( '[email protected] ' , '@' );
// 'example.com'
// 最後の出現箇所を基準にする
Str :: afterLast ( 'App\Http\Controllers\UserController' , ' \\ ' );
// 'UserController'
Str :: beforeLast ( 'App\Http\Controllers\UserController' , ' \\ ' );
// 'App\Http\Controllers'
Str::between() — 2つの文字列の間を取得
use Illuminate\Support\ Str ;
Str :: between ( '[debug] Error occurred in module' , '[' , ']' );
// 'debug'
Str::start() / Str::finish() — 特定文字で始まる・終わるようにする
すでにその文字で始まっていれば追加しません(二重化しない)。
use Illuminate\Support\ Str ;
// '/' で始まるようにする
Str :: start ( 'users/profile' , '/' );
// '/users/profile'
Str :: start ( '/users/profile' , '/' );
// '/users/profile'(二重にならない)
// '/' で終わるようにする
Str :: finish ( 'https://example.com' , '/' );
// 'https://example.com/'
Str::chopStart() / Str::chopEnd() — 特定の接頭辞・接尾辞を除去
use Illuminate\Support\ Str ;
Str :: chopStart ( 'https://laravel.com' , 'https://' );
// 'laravel.com'
// 配列で複数パターンに対応
Str :: chopStart ( 'http://laravel.com' , [ 'https://' , 'http://' ]);
// 'laravel.com'
Str :: chopEnd ( 'UserController.php' , '.php' );
// 'UserController'
マスキングとセキュリティ
Str::mask() — 文字列をマスクする
メールアドレスや電話番号の一部を隠す処理に使います。
use Illuminate\Support\ Str ;
// 4文字目以降を '*' でマスク
Str :: mask ( '[email protected] ' , '*' , 4 );
// 'yama**************'
// 末尾4文字だけ表示(負の値でオフセット)
Str :: mask ( '1234-5678-9012-3456' , '*' , - 4 );
// '***************3456'
// 範囲を指定してマスク
Str :: mask ( '[email protected] ' , '*' , 3 , 5 );
// 'yam*****example.com'
Str::excerpt() — 文脈付きで文字列を抜き出す
検索結果のスニペット表示などに使います。
use Illuminate\Support\ Str ;
$text = 'Laravelは美しいWebアプリケーションを構築するためのPHPフレームワークです。' ;
Str :: excerpt ( $text , 'PHP' , [ 'radius' => 10 ]);
// '...ためのPHPフレームワー...'
ランダム文字列と識別子
Str::random() — ランダム文字列を生成
トークンやパスワードのリセット用のキーを生成するときに使います。
use Illuminate\Support\ Str ;
Str :: random ( 32 );
// 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' (英数字32文字)
Str::uuid() / Str::ulid() — UUID・ULID生成
use Illuminate\Support\ Str ;
( string ) Str :: uuid ();
// '550e8400-e29b-41d4-a716-446655440000'
// 時系列ソート可能なUUID (UUIDv7)
( string ) Str :: uuid7 ();
// ULID(ソート可能なID)
( string ) Str :: ulid ();
// '01ARZ3NDEKTSV4RRFFQ69G5FAV'
Str::password() — セキュアなパスワード生成
use Illuminate\Support\ Str ;
Str :: password ( 12 );
// 大文字・小文字・数字・記号を含む12文字のランダム文字列
Fluent Strings(メソッドチェーン)
Str::of() または str() で始めると、Stringable インスタンスが返り、メソッドをチェーンできます。最終的に文字列として使いたい場合は (string) でキャストするか、文字列コンテキストで使います。
use Illuminate\Support\ Str ;
$result = Str :: of ( ' hello world ' )
-> trim ()
-> title ()
-> append ( '!' )
-> toString ();
// 'Hello World!'
実用的なメソッドチェーンの例
ブログ記事のスラッグ生成
use Illuminate\Support\ Str ;
$slug = Str :: of ( ' My New Blog Post: Part 1 ' )
-> trim ()
-> lower ()
-> slug ( '-' )
-> limit ( 50 );
// 'my-new-blog-post-part-1'
URLからドメインを抽出
use Illuminate\Support\ Str ;
$domain = Str :: of ( 'https://www.example.com/path/to/page' )
-> after ( '//' )
-> before ( '/' )
-> chopStart ( 'www.' );
// 'example.com'
ユーザー入力のサニタイズ
use Illuminate\Support\ Str ;
$clean = Str :: of ( $userInput )
-> squish () // 余分な空白を除去
-> limit ( 255 ) // 長さを制限
-> toString ();
クラス名からファイルパスを生成
use Illuminate\Support\ Str ;
$path = Str :: of ( 'App\Http\Controllers\UserController' )
-> replace ( ' \\ ' , '/' )
-> append ( '.php' )
-> toString ();
// 'App/Http/Controllers/UserController.php'
条件付きメソッドチェーン(when())
use Illuminate\Support\ Str ;
$result = Str :: of ( 'Laravel' )
-> when ( $isUppercase , fn ( $str ) => $str -> upper ())
-> append ( ' Framework' );
// $isUppercase が true なら 'LARAVEL Framework'
// false なら 'Laravel Framework'
pipe() — 任意のコールバックを挟む
use Illuminate\Support\ Str ;
$result = Str :: of ( 'my-slug' )
-> pipe ( fn ( $str ) => $str -> replace ( '-' , '_' ))
-> upper ()
-> toString ();
// 'MY_SLUG'
Str::of() で使える主要メソッド一覧
Fluent Strings で使えるメソッドは静的メソッドとほぼ同じセットです。以下は代表的なものです。
use Illuminate\Support\ Str ;
$str = Str :: of ( 'Hello, World!' );
$str -> length (); // 13
$str -> upper (); // 'HELLO, WORLD!'
$str -> lower (); // 'hello, world!'
$str -> trim (); // 'Hello, World!'
$str -> slug (); // 'hello-world'
$str -> camel (); // 'hello,World!'(記号除去なし)
$str -> contains ( 'World' ); // true
$str -> startsWith ( 'Hello' ); // true
$str -> endsWith ( '!' ); // true
$str -> replace ( ',' , '' ); // 'Hello World!'
$str -> prepend ( '>>> ' ); // '>>> Hello, World!'
$str -> append ( ' <<<' ); // 'Hello, World! <<<'
$str -> reverse (); // '!dlroW ,olleH'
$str -> wordCount (); // 2
まとめ
メソッド 用途 Str::slug($str)URLフレンドリーなスラッグ生成 Str::limit($str, $n)文字数で切り詰め Str::contains($str, $needle)文字列を含むか確認 Str::startsWith($str, $needle)指定文字列で始まるか確認 Str::endsWith($str, $needle)指定文字列で終わるか確認 Str::replace($search, $replace, $str)文字列を置換 Str::camel($str)camelCase に変換 Str::snake($str)snake_case に変換 Str::kebab($str)kebab-case に変換 Str::studly($str)StudlyCase に変換 Str::upper($str)大文字に変換 Str::lower($str)小文字に変換 Str::squish($str)余分な空白を除去 Str::after($str, $search)指定文字列以降を取得 Str::before($str, $search)指定文字列以前を取得 Str::between($str, $from, $to)2文字列間を取得 Str::mask($str, '*', $index)文字列をマスク Str::random($length)ランダム文字列生成 Str::uuid()UUID生成 Str::of($str)Fluentスタイルの開始
静的メソッド vs Fluent(Str::of)
静的メソッドを使う場面 :
1〜2回の変換だけでよい場合
シンプルで読みやすいコード
$slug = Str :: slug ( $title );
Fluent(Str::of)を使う場面 :
3つ以上の変換をまとめて行う場合
条件分岐(when())を含む場合
処理の流れを上から下に読めるようにしたい場合
$slug = Str :: of ( $title )
-> trim ()
-> lower ()
-> slug ()
-> limit ( 50 );
PHPの strtolower(), substr(), str_replace() などの標準関数の代わりに Str クラスを使うことで:
マルチバイト文字(日本語)を安全に扱える(mb_* 関数を内部で使用)
メソッドチェーンで処理をまとめられる
引数の順序を覚えなくてよい(一貫したインターフェース)
Laravelのコードスタイルに統一できる