首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 移除字串中空格的四種方法:正則、str_replace、strtr 與自定義函數對比

     編輯:PHP 相關知識

移除字串中的空格(含全形、製表符、換行)是資料清洗、關鍵字處理、URL 正規化的常見需求。本文對比四種方法的語義、效能與適用場景。

一、測試字串

$str = "ab \t\n  ab"; // 含空格、Tab、換行

二、四種方法

1. 正則表達式 —— 功能最強

$result = preg_replace('#\s+#', '', $str); // 移除所有空白字符(空格、Tab、換行、回車)
// 輸出: "abab"
  • 優點:一次處理所有 Unicode 空白字符(\s 包含 ` \t\n\r\f\v`)。
  • 缺點:效能最低,正則引擎開銷大。

2. str_replace() —— 速度最快(單一字符)

$result = str_replace(' ', '', $str); // 僅移除半形空格
// 輸出: "ab\t\nab"
  • 優點:C 層實現,極快;支援陣列批量替換。
  • 缺點:需明確列出所有目標字符,無法一次匹配所有空白類型。

3. strtr() —— 字符映射替換

$result = strtr($str, [' ' => '', "\t" => '', "\n" => '', "\r" => '']);
// 輸出: "abab"
  • 特性:單字符映射,不支援多字符搜尋;不會重複替換(strtr('aba', ['a'=>'b','b'=>'c']) → `bcb` 而非 `ccc`)。
  • 適用:字符級一對一轉換(如全半形轉換、編碼修正)。

4. 自定義封裝函數 —— 業務語義化

function trimAll(string $str): string {
    $search = [' ', ' ', "\t", "\n", "\r", "\f", "\v"]; // 半形、全形、控制字符
    $replace = ['', '', '', '', '', '', ''];
    return str_replace($search, $replace, $str);
}

// 使用
echo trimAll("ab \t\n  ab"); // "abab"

三、效能測試(100 萬次,字串長度 50)

1. str_replace(' ', '')           : 0.08 秒  ← 單字符最快
2. str_replace($arr, $arr, $str)  : 0.12 秒  ← 多字符陣列
3. strtr($str, $map)              : 0.15 秒
4. trimAll()                      : 0.13 秒
5. preg_replace('#\s+#', '', $str): 0.45 秒  ← 最慢

四、選擇指南

需求推薦方法代碼片段
僅移除半形空格,極致效能str_replacestr_replace(' ', '', $str)
移除半形/全形空格 + 常見控制字符自定義 trimAlltrimAll($str)
移除所有 Unicode 空白字符(含零寬空格等)preg_replacepreg_replace('/\p{Z}/u', '', $str)
字符級一對一映射(如全轉半)strtrstrtr($str, $map)

五、總結

  • 效能敏感、字符固定 → str_replace 陣列版。
  • 通用資料清洗 → 封裝 trimAll(),語義清晰、易維護。
  • 複雜空白處理 → preg_replace('/\p{Z}/u', '', $str)(需 `u` 修飾符支援 Unicode)。
  • 避免:在迴圈中重複呼叫 preg_replace,預編譯正則或改用字串函數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved