PowerShell 的 Trim() 方法功能強大,不僅能移除首尾空白字元,更可指定自訂字元集合一次清理多種雜訊字元 (如點號、減號、製表符、換行符)。本文詳細說明 Trim、TrimStart、TrimEnd 的語法、字元集合運作機制、實戰範例與常見誤區。
# 移除首尾指定字元 (預設空白字元: space, tab, newline, carriage return)
$string.Trim([char[]]chars)
# 僅移除開頭
$string.TrimStart([char[]]chars)
# 僅移除結尾
$string.TrimEnd([char[]]chars)
$text = @"
... Hello
...---
"@
# 字元集合:空格、點號、減號、製表符、換行符、歸位符
$clean = $text.Trim(" .-`t`n`r")
# 結果: "Hello"
# 逐步拆解
$text.Trim(".") # 移除首尾點號
$text.Trim("-") # 移除首尾減號
$text.Trim("`n`r") # 移除首尾換行/歸位
$path = "\\server\share\folder\\"
$cleanPath = $path.Trim('\') # "server\share\folder"
$url = "https://example.com/api//"
$cleanUrl = $url.Trim('/') # "https://example.com/api"
# 同時處理正反斜線
$mixed = "/path\to\resource\\"
$clean = $mixed.Trim('/\') # "path\to\resource"
$raw = ' "John Doe" , "Jane Smith" '
# 先分割再清理
$fields = $raw.Split(',').ForEach({ $_.Trim(' "') })
# 結果: @("John Doe", "Jane Smith")
$text = "HiddenText" # 含零寬空格 U+200B
$clean = $text.Trim([char]0x200B) # 移除首尾零寬空格
$clean = $text.Trim([char]0xFEFF) # 移除 BOM (U+FEFF)
| 方法 | 適用場景 | 範例 | 注意 |
|---|---|---|---|
Trim(chars) | 移除首尾特定字元集合 | " abc ".Trim() → "abc" | 不影響中間 |
TrimStart/End | 單側清理 | "---abc".TrimStart('-') → "abc" | |
Replace(old, new) | 全域替換 (含中間) | "a-b-c".Replace('-', '') → "abc" | 字串替換,非字元集合 |
-replace 'pattern', '' | 正則表達式替換 | " a b " -replace '^\s+|\s+$', '' → "a b" | 功能最強,效能稍低 |
| 誤區 | 正確理解 |
|---|---|
Trim("abc") 會移除首尾的 "abc" 子字串 | 錯誤。它會移除首尾任意屬於 {a, b, c} 的字元。"cababc".Trim("abc") → 空字串 (所有字元都在集合中) |
| 想移除中間的字元 | 用 Replace 或 -replace,Trim 只處理首尾 |
| 傳入字串而非字元陣列 | PowerShell 自動將字串轉為字元陣列,Trim(".-") 等同 Trim(@('.','-')),行為一致 |
以為 Trim() 會移除所有 Unicode 空白字元 | 預設僅移除 ASCII 空白 (U+0020, U+0009, U+000A, U+000D)。完整 Unicode 空白需自行列舉或用 Regex ^\p{Zs}+|\p{Zs}+$ |
function Clean-String {
param(
[string]$InputString,
[char[]]$CharsToTrim = " `t`n`r", # 預設空白字元
[switch]$TrimQuotes
)
$chars = $CharsToTrim
if ($TrimQuotes) { $chars += @('"', "'") }
$InputString.Trim($chars)
}
# 使用
$dirty = ' " Hello World " '
Clean-String $dirty -TrimQuotes # => Hello World
Trim() 清理首尾雜訊:語意清晰、效能最佳、無正則開銷。Trim(" .,-_") 比正則更易讀維護。Replace/-replace:Trim 無法觸及中間。[char]0xXXXX 精確指定碼位。$files | ForEach-Object { $_.Name.Trim('_') }。掌握 Trim 系列方法的字元集合語意,能讓你的 PowerShell 字串清理代碼更簡潔、高效、易維護,是資料清洗、日誌解析、檔名正規化等日常運維任務的必備技能。