フォーム入力の前後に入った不要なスペース、API レスポンスに含まれる改行やタブ文字など、文字列の先頭・末尾の空白を除去する操作は日常的に必要です。JavaScript の trim メソッドを使えば 1 行で実現できます。
・trim で先頭と末尾の空白を同時に除去する方法
・trimStart(先頭のみ)/ trimEnd(末尾のみ)の使い方
・trim が除去する空白文字の一覧
・全角スペース(U+3000)の扱い
・ゼロ幅スペースなど特殊な空白の除去方法
・文字列内部の連続スペースを 1 つにまとめる方法
・フォーム入力の正規化・メールアドレスのクリーニングの実務パターン
trim の基本
const result = str.trim(); // 戻り値: 先頭と末尾の空白を除去した新しい文字列 // 元の文字列は変更されない
const str = " Hello World ";
console.log(str.trim()); // "Hello World"
console.log(str); // " Hello World "(元は変わらない)
// タブ・改行も除去される
console.log("\t\n Hello \n\t".trim()); // "Hello"
"Hello World".trim() は "Hello World" のままです。trimStart / trimEnd で片側だけ除去する
| メソッド | 除去する位置 | 別名 |
|---|---|---|
trim() |
先頭 + 末尾 | — |
trimStart() |
先頭のみ | trimLeft() |
trimEnd() |
末尾のみ | trimRight() |
const str = " Hello "; console.log(str.trimStart()); // "Hello "(先頭のみ除去) console.log(str.trimEnd()); // " Hello"(末尾のみ除去) console.log(str.trim()); // "Hello"(両端除去)
trimLeft / trimRight は trimStart / trimEnd の別名(エイリアス)です。ECMAScript 2019 で trimStart / trimEnd が正式名称として策定されたため、新しいコードではこちらを使いましょう。trim が除去する空白文字の一覧
trim は半角スペースだけでなく、以下のすべての空白文字を除去します。
| 文字 | Unicode | 説明 |
|---|---|---|
| 半角スペース | U+0020 | 最も一般的な空白 |
| タブ | U+0009 | \t |
| 改行(LF) | U+000A | \n |
| 復帰(CR) | U+000D | \r |
| 垂直タブ | U+000B | \v |
| フォームフィード | U+000C | \f |
| ノーブレークスペース | U+00A0 | |
| 全角スペース | U+3000 | 日本語入力でよく混入 |
| BOM | U+FEFF | バイトオーダーマーク |
const str = "\u3000Hello\u3000"; console.log(str.trim()); // "Hello"(全角スペースも除去される)
trim では除去されない特殊な文字
以下の文字は Unicode の空白文字カテゴリに含まれないため、trim では除去されません。
| 文字 | Unicode | 説明 |
|---|---|---|
| ゼロ幅スペース | U+200B | 見えないがコピペで混入しやすい |
| ゼロ幅非結合子 | U+200C | ZWNJ |
| ゼロ幅結合子 | U+200D | ZWJ(絵文字結合にも使用) |
| ソフトハイフン | U+00AD | 改行可能位置を示す |
const str = "\u200BHello\u200B"; console.log(str.trim()); // "\u200BHello\u200B"(除去されない) console.log(str.trim().length); // 7(見た目5文字だが7文字) // 正規表現で除去 const cleaned = str.replace(/[\u200B-\u200D\uFEFF]/g, "").trim(); console.log(cleaned); // "Hello" console.log(cleaned.length); // 5
文字列内部のスペースを処理する
trim は先頭・末尾のみ対象なので、文字列内部のスペース処理には別の方法を使います。
連続スペースを 1 つにまとめる
const str = "Hello World JavaScript"; const normalized = str.replace(/\s+/g, " ").trim(); console.log(normalized); // "Hello World JavaScript"
すべてのスペースを除去する
const str = " H e l l o "; console.log(str.replace(/\s/g, "")); // "Hello"
全角スペースも含めてすべて半角スペースに統一する
const str = "Hello\u3000World\u3000JavaScript"; const unified = str.replace(/[\s\u3000]+/g, " ").trim(); console.log(unified); // "Hello World JavaScript"
実務でよく使うパターン
フォーム入力のバリデーション前処理
const form = document.getElementById("myForm");
form.addEventListener("submit", (e) => {
e.preventDefault();
const name = form.querySelector("[name=username]").value.trim();
const email = form.querySelector("[name=email]").value.trim().toLowerCase();
if (!name) {
alert("名前を入力してください");
return;
}
// trim 済みの値でバリデーション・送信
console.log({ name, email });
});
空白のみの入力を「空」として判定する
function isBlank(str) {
return !str?.trim();
}
console.log(isBlank("")); // true
console.log(isBlank(" ")); // true(スペースのみ)
console.log(isBlank("\t\n")); // true(タブ+改行のみ)
console.log(isBlank(null)); // true
console.log(isBlank("Hello")); // false
CSV 値のクリーニング
const csvRow = " apple , banana , cherry ";
// 分割して各要素を trim
const items = csvRow.split(",").map(item => item.trim());
console.log(items); // ["apple", "banana", "cherry"]
複数行テキストの各行を trim する
const text = " line1 \n line2 \n line3 ";
const trimmedLines = text
.split("\n")
.map(line => line.trim())
.filter(Boolean) // 空行を除去
.join("\n");
console.log(trimmedLines);
// "line1\nline2\nline3"
検索キーワードの正規化
function normalizeSearchQuery(query) {
return query
.trim() // 前後の空白を除去
.replace(/\s+/g, " ") // 連続スペースを1つに
.toLowerCase(); // 小文字に統一
}
console.log(normalizeSearchQuery(" JavaScript Tutorial "));
// "javascript tutorial"
関連記事
- 空文字列の判定方法 — length・真偽値・trim()
- replace で文字列を置換する方法
- split の使い方 — 文字列を配列に変換
- 文字列の大文字・小文字を変換する方法
- 文字列の長さを取得する方法
- 全角スペースを半角スペースに変換する方法
よくある質問
trimLeft は非標準の別名で、trimStart が ECMAScript 2019 で策定された正式名称です。新しいコードでは trimStart / trimEnd を使いましょう。str.replace(/[\u200B-\u200D\uFEFF]/g, "") で別途除去してください。str.replace(/\s+/g, " ").trim() を使ってください。まとめ
trim は文字列の先頭と末尾の空白を除去するシンプルなメソッドです。
- 基本:
str.trim()で両端の空白を除去 - 片側のみ:
trimStart()(先頭)/trimEnd()(末尾) - 除去対象: 半角スペース・タブ・改行・全角スペースなどすべての空白文字
- 除去されない文字: ゼロ幅スペース(U+200B)など → 正規表現で別途対応
- 内部のスペース:
replace(/\s+/g, " ").trim()で連続スペースを統一
フォーム入力のバリデーション前に trim するのは基本中の基本です。検索クエリの正規化や CSV のクリーニングなど、文字列処理の前処理として日常的に使うメソッドなので、trimStart / trimEnd も含めてしっかり使いこなしましょう。