什麼是 Str 類別
Illuminate\Support\Str 類別提供豐富的字串操作方法。相較於個別呼叫 PHP 的標準字串函式,可用統一介面直覺處理字串。
Laravel 的字串操作有兩種風格:
- 靜態方法風格:
Str::slug($title, '-')— 適合單次操作 - Fluent 風格(method chain):
Str::of($title)->slug('-')->limit(50)— 可將多個操作串起來寫
str() 全域 helper 函式與 Str::of() 等效。可寫成 str('hello')->upper()。大小寫轉換
轉換字串大小寫(大寫、小寫、命名法)的方法。常用於資料庫欄位名或 API 回應鍵值的轉換。Str::camel() / Str::snake() / Str::kebab() / Str::studly()
Str::lower() / Str::upper() / Str::title()
Slug 與 URL
Str::slug() — 產生 URL 友善的 slug
產生文章或頁面 URL 時的必備方法。將空格與特殊字元轉換為 URL 安全的字串。
用 Str::of() 從 slug 產生到驗證一次完成
字串截斷
Str::limit() — 依字元數截斷
在列表顯示文章內文或留言時產生預覽文字的方法。
Str::words() — 依單字數截斷
字串搜尋與確認
Str::contains() — 是否包含子字串
Str::startsWith() / Str::endsWith()
Str::is() — 萬用字元樣式比對
字串轉換與置換
Str::replace() — 置換字串
Str::replaceArray() — 依序以陣列置換
Str::replaceMatches() — 以正則表達式置換
Str::remove() — 移除字串
Str::squish() — 移除多餘空白
字串前後操作
Str::before() / Str::after()
Str::between() — 取得兩字串之間
Str::start() / Str::finish() — 確保以特定字元開頭/結尾
若已經以該字元開頭,不會重複加入(不會加倍)。
Str::chopStart() / Str::chopEnd() — 移除特定前綴/後綴
遮罩與安全性
Str::mask() — 遮罩字串
用於隱藏 email 或電話號碼的部分。
Str::excerpt() — 依上下文取出字串
用於搜尋結果的 snippet 顯示。
隨機字串與識別碼
Str::random() — 產生隨機字串
用於產生 token 或密碼重設用金鑰。
Str::uuid() / Str::ulid() — 產生 UUID/ULID
Str::password() — 產生安全密碼
Str::counted() — 帶數量的單數/複數
依數值轉為單複數,並連同格式化後的數值一併回傳。
Fluent Strings(method chain)
以Str::of() 或 str() 起頭會回傳 Stringable 實例,可鏈式呼叫方法。最後要作為字串使用時,用 (string) 轉換或在字串上下文中使用。
實用的 method chain 範例
產生部落格文章 slug條件式 method chain(when())
pipe() — 插入任意 callback
Str::of() 可用主要方法一覽
Fluent Strings 可用的方法與靜態方法幾乎相同。以下為代表性的方法:
總結
常用 Str 方法一覽
常用 Str 方法一覽
靜態方法 vs Fluent(Str::of)
靜態方法 vs Fluent(Str::of)
使用靜態方法的時機:使用 Fluent(Str::of)的時機:
- 只做 1〜2 次轉換
- 簡潔易讀的程式碼
- 要一次做 3 個以上的轉換
- 需含條件分支(
when()) - 想讓處理由上至下順讀
Str 類別 vs PHP 標準函式
Str 類別 vs PHP 標準函式
以
Str 類別取代 PHP 的 strtolower()、substr()、str_replace() 等標準函式可獲得:- 安全處理多位元組字元(中文/日文)(內部使用
mb_*函式) - 以 method chain 整合處理
- 不用記引數順序(一致的介面)
- 統一使用 Laravel 的撰寫風格