javascript trimの使い方完全ガイド:空白削除から正規表現・互換性まで

この記事ではJavaScriptのString.prototype.trim()で文字列の前後の空白や改行を除去する方法を、構文・返値・使用例とともに解説します。trimStart/trimEndやreplace+正規表現での代替、全角空白や任意文字の削除も扱い、入力フォームの余計な空白による不具合を防げます。

JavaScriptのtrim()とは(前後の空白・改行を取り除く)

javascript+trim+whitespace

JavaScriptのtrim()は、文字列の先頭と末尾にある不要な空白や改行などを取り除き、見た目や比較のブレをなくすためのメソッドです。入力欄や外部データには、意図しないスペース・改行が混ざりやすく、そのまま扱うと「同じ内容のはずなのに一致しない」「空文字チェックがすり抜ける」といった不具合につながります。

「javascript trim」というキーワードで調べる場面の多くは、こうした“目に見えにくい余計な文字”を消して、文字列を扱いやすくしたいケースです。trim()はまさにそのための基本機能として押さえておくと便利です。

trim()で削除される文字(空白・行終端など)の種類

trim()が削除するのは、文字列の前後にある「空白として扱われる文字」です。代表的には次のようなものが含まれます。

  • 半角スペース(通常のスペース)
  • タブ(\t
  • 改行(\n
  • 復帰(\r
  • その他、仕様上「空白(Whitespace)」や「行終端(LineTerminator)」に分類される文字

ポイントは、trim()が対象にするのは先頭と末尾のみだということです。たとえば文字列の途中にあるスペース(例:"a b"の間のスペース)は削除されません。また、見た目が空白に近い文字であっても、空白として分類されない文字は削除対象にならない場合があります。

trim()が役立つ典型的な場面(入力値の正規化など)

trim()が特に役立つのは、文字列を比較・保存・検証する前に「揺れ」を吸収したい場面です。たとえば、同じ単語でも前後に空白が付くだけで別の文字列として扱われてしまうため、事前に整えておくと事故を防げます。

  • フォーム入力の正規化:ユーザーが末尾にスペースを入れてしまった場合でも、意図した値として扱える
  • ログインIDやメールアドレスなどの入力チェック:空白付きで入力されて「存在しないユーザー」扱いになるのを防ぐ
  • 空文字判定の精度向上:見た目は空でも実際はスペースだけ、改行だけ…という入力を正しく弾ける
  • 外部データ(CSV/コピー&ペースト等)の取り込み:セル末尾の改行や余分な空白を除去してデータの一貫性を保つ
  • 比較・検索の前処理:同一判定やキーワード検索で、前後の空白が原因の不一致を減らす

このようにtrim()は、「ユーザーや外部要因で混入する余計な空白・改行」を手軽に取り除き、後続処理を安定させるための基本手段として活躍します。

trim()の基本的な使い方

javascript+trim+string

JavaScriptの文字列から前後の余計な空白を取り除きたいときに使うのがtrim()です。入力値の整形や比較処理の前段などで登場することが多く、まずは「どう書くか」「何を渡せるか」「何が返るか」を押さえると、迷わず使えるようになります。

構文(書き方)

trim()は、文字列(String)のインスタンスメソッドとして呼び出します。基本形は次のとおりです。

文字列.trim()

例えば、変数strが文字列なら、str.trim()のようにドットで呼び出します。対象はあくまで「文字列」なので、数値やnull/undefinedに対してそのまま呼ぶとエラーになる点は意識しておくと安全です。

引数(指定できるもの)

trim()は引数を取りません。つまり、削除する文字の種類や削除量などを「指定して調整する」用途には使えず、前後の空白を取り除く処理が固定で実行されます。

  • 引数なしで呼び出す(str.trim()
  • 削除対象を指定したい場合は、別の方法を検討する必要がある(このセクションでは扱いません)

戻り値(何が返るか)

trim()の戻り値は、前後の空白が取り除かれた新しい文字列です。戻り値が新しい文字列であるため、結果を変数に受け取って使うのが一般的です。

const trimmed = str.trim();

また、もともと前後に削除対象がない場合でも、戻り値は文字列として返ります(見た目の変化がないだけで、呼び出し自体は可能です)。

動作確認用のシンプルなサンプル

実際にjavascript trimの動きを確認するために、前後にスペースや改行を含む文字列を用意して、trim()適用前後を比較してみます。

const str = "  \n  JavaScript trim  \t  ";
console.log("[" + str + "]");
console.log("[" + str.trim() + "]");

出力の角括弧[]は、空白が残っているかを見分けやすくするためのものです。1行目は前後に空白や改行・タブが含まれた状態で表示され、2行目ではtrim()によって前後の余白が取り除かれた文字列が確認できます。

trim()の使用例(実践コード)

javascript+trim+whitespace

文字列の前後の空白を削除する基本例

JavaScriptのtrim()は、文字列の「先頭」と「末尾」にある空白や改行を取り除きたいときに最も手軽です。ユーザー入力や外部データは見た目では気づきにくい余計な空白が混ざりやすいため、まずは基本形としてjavascript trimの動きをコードで確認しておくと実務でも迷いません。

// 先頭と末尾にスペースがある例
const s1 = "  Hello World  ";
console.log(s1.trim()); // "Hello World"

// 改行やタブが混ざる例
const s2 = "\n\t  JavaScript  \t\n";
console.log(s2.trim()); // "JavaScript"

// すでに前後に空白がない場合
const s3 = "NoSpaces";
console.log(s3.trim()); // "NoSpaces"

ポイントは、trim()が効くのは「前後だけ」という点です。途中にあるスペース(例:"Hello World"の連続スペース)はそのまま残るため、用途に応じて「前後を整える」目的で使うのが基本になります。

フォーム入力やCSVなどでの前処理例

実務では、フォーム入力・CSV・テキストファイルなどから取り込んだ値をそのまま扱うと、前後の空白のせいで一致判定や必須チェックが想定どおりに動かないことがあります。そこで、データを利用する直前にtrim()で正規化(前処理)しておくと安全です。

以下はフォーム入力を想定し、入力値をtrim()してからバリデーションや送信データに反映する例です。

// 例:ユーザーが "  user@example.com  " のように入力しても正しく扱う
function normalizeEmail(rawValue) {
  return rawValue.trim();
}

// 空文字チェックの前に trim() を挟むのが定番
function isRequiredFilled(rawValue) {
  return rawValue.trim().length > 0;
}

console.log(normalizeEmail("  user@example.com  ")); // "user@example.com"
console.log(isRequiredFilled("   ")); // false(空白だけの入力を弾ける)

次に、CSVを想定した前処理例です。CSVでは区切り文字(カンマ)の前後に空白が入るケースがよくあり、そのままだと比較や集計でズレが生じます。各列をtrim()してから扱うと安定します。

// 例:カンマ区切りの1行を配列にして、各項目の前後空白を除去
const line = " 001,  Alice  ,  alice@example.com  ";
const cols = line.split(",").map((v) => v.trim());

console.log(cols);
// ["001", "Alice", "alice@example.com"]

// 例:複数行のCSV(ヘッダー付き)を簡易的に処理
const csv = `id,name,email
 001,  Alice  ,  alice@example.com  
 002, Bob,  bob@example.com`;

const rows = csv.split("\n").map((row) =>
  row.split(",").map((v) => v.trim())
);

console.log(rows);
/*
[
  ["id","name","email"],
  ["001","Alice","alice@example.com"],
  ["002","Bob","bob@example.com"]
]
*/

このようにjavascript trimを前処理に組み込むと、

  • ユーザー入力の「見えない空白」による不一致(ログインID・メールアドレスなど)を防げる
  • 空白だけの入力を「未入力」として判定しやすくなる
  • CSVなど外部データの列値が安定し、検索・比較・集計がブレにくくなる

といった実務的なメリットが得られます。

先頭・末尾だけを削除する:trimStart() / trimEnd()

javascript+trim+whitespace

JavaScriptで空白を取り除く処理は「両端まとめて」だけではありません。javascript trimで検索していると、入力値の前だけを揃えたい、末尾の改行や余計なスペースだけ消したい、といった“片側だけ”の要件に出会います。そんなときに使うのがtrimStart()trimEnd()です。意図した側のみを削除できるため、データの意味を保ったまま整形できます。

先頭の空白のみ削除する(trimStart)

trimStart()は、文字列の「先頭(左側)」に連続している空白文字を削除します。先頭だけ整形したい場合に便利で、たとえばインデントが混ざった入力や、先頭に余計なスペースが入りがちなテキストを正規化したいときに向きます。

const s = "   hello world   ";

console.log(s.trimStart()); // "hello world   "
console.log(s);             // "   hello world   "(元の文字列はそのまま)

ポイントは、削除対象が「先頭にある分だけ」だという点です。途中のスペースや末尾のスペースは残るため、「末尾の空白は意味がある(固定長データなど)」といったケースでも安全に扱えます。

末尾の空白のみ削除する(trimEnd)

trimEnd()は、文字列の「末尾(右側)」に連続している空白文字を削除します。末尾側に紛れ込むスペースや改行だけを取り除きたいときに効果的です。

const s = "   hello world   ";

console.log(s.trimEnd()); // "   hello world"
console.log(s);           // "   hello world   "(元の文字列はそのまま)

末尾のみを削ることで、先頭の空白(たとえば意図したインデントやフォーマット)を維持したまま、行末の不要な空白だけを消す、といった整形が可能になります。

どれを使うべきかの使い分け

trimStart()trimEnd()は、どちらも「片側だけ」を削除するためのメソッドです。どちらを選ぶかは、“どの空白がノイズで、どの空白が意味を持つか”で判断すると失敗しにくくなります。

  • 先頭の余計な空白だけが問題trimStart()(例:先頭にだけスペースが混ざる入力を整えたい)
  • 末尾の余計な空白だけが問題trimEnd()(例:行末のスペースや末尾の改行っぽい見た目を消したい)
  • 先頭と末尾の両方を消したい:要件が「両端」なら、両側を削る目的に合う方法を選びます(片側だけを残す必要がない場合)

また、データ整形では「消しすぎ」がトラブルの原因になります。javascript trimの文脈でも、先頭・末尾のどちらに問題が出ているかを切り分けてから、trimStart()/trimEnd()を選ぶと、意図せず必要な空白まで消してしまうリスクを下げられます。

trim()で対応できないケースと代替手段(replace/正規表現)

javascript+trim+regex

JavaScriptのtrim()は「文字列の前後の空白」を落とす用途に強い一方で、削除対象を細かく制御したい場面(全角スペースの扱いを明示したい、途中の空白もまとめて整形したい、空白以外も消したい等)では力不足になることがあります。そうした場合は、replace()や正規表現を使うと、要件に合わせて柔軟に処理できます。ここでは「javascript trim」で困りやすい非対応ケースと代替手段を、実務で使える形で整理します。

replaceと正規表現で前後の空白を削除する

trim()と同様に「先頭・末尾の空白」を削除したいだけなら、正規表現を使ったreplace()で明示的に実装できます。例えば、先頭の連続空白は^\s+、末尾は\s+$で表現できます。

// 先頭・末尾の空白を削除(trim相当のイメージ)
const s = "   hello world   \n";

const trimmed = s
  .replace(/^\s+/, "")  // 先頭の空白を削除
  .replace(/\s+$/, ""); // 末尾の空白を削除

console.log(trimmed); // "hello world"

正規表現を使うメリットは、「どの文字を空白と見なすか」「どこを削るか(先頭だけ・末尾だけ・両方)」をパターンとして明文化できる点です。ログ整形やデータクレンジングなどで、処理の意図をコードに残したい場合に向きます。

文字列中の空白(途中のスペース)もまとめて処理する方法

trim()は前後しか触らないため、文字列途中にある余計なスペースは残ります。たとえば「単語間のスペースを1つに揃える」「すべての空白を除去してID化する」などは、replace()と正規表現で対応します。

代表的なパターンは次の2つです。

  • 連続する空白を1つに正規化する(見た目の整形)
  • 空白そのものを削除する(機械処理向けに詰める)
const s = "  JavaScript   trim   example  ";

// 1) 前後を落としてから、途中の連続空白を1つに揃える
const normalizedSpaces = s.trim().replace(/\s+/g, " ");
console.log(normalizedSpaces); // "JavaScript trim example"

// 2) 途中も含めて空白をすべて削除する
const removedAllSpaces = s.replace(/\s+/g, "");
console.log(removedAllSpaces); // "JavaScripttrimexample"

「検索キーワードの正規化」「氏名のスペースゆれを統一」など、人間が読む前提なら1)が便利です。一方で、コード値・識別子化・照合用の正規化など、空白がノイズになるケースでは2)のように全削除が有効です。

全角スペースを含めて削除する方法

入力データには半角スペースだけでなく、全角スペース( )が混在することがあります。要件として「全角スペースも確実に削除・正規化したい」場合は、正規表現で全角スペースを対象に含めると意図が明確になります。

const s = " 全角スペース と  半角スペース が混在 ";

// 前後の空白(半角/全角)を削除
const trimmedZenHan = s
  .replace(/^[\s ]+/, "")
  .replace(/[\s ]+$/, "");

console.log(trimmedZenHan); // "全角スペース と  半角スペース が混在"

途中も含めて「全角・半角スペースをまとめて1つの半角スペースに寄せる」なら、次のように書けます。

const s2 = " A  B   C D  ";

// 全角スペースを半角に寄せ、連続空白を1つにし、前後も整形
const normalized = s2
  .replace(/ /g, " ")
  .trim()
  .replace(/\s+/g, " ");

console.log(normalized); // "A B C D"

「javascript trim」だけでは全角混在の要件が読み取りにくい場合があるため、全角スペースを明示して扱う実装は、データ品質を担保したい場面で特に役立ちます。

空白以外(任意の文字)を削除・置換する方法

trim()は空白類の削除専用であり、「特定の記号を取り除きたい」「数字以外を消して数値だけ取り出したい」「先頭末尾の特定文字だけ削りたい」といったニーズには対応できません。ここでもreplace()と正規表現が有効です。

用途別の例を挙げます。

// 例1: 数字以外を削除して、数値だけを抽出する
const priceText = "税込 1,980円";
const digitsOnly = priceText.replace(/[^\d]/g, "");
console.log(digitsOnly); // "1980"

// 例2: 先頭末尾の特定文字(例: ダブルクォート)を削除する
const quoted = "\"hello\"";
const unquoted = quoted.replace(/^"+|"+$/g, "");
console.log(unquoted); // "hello"

// 例3: 複数の記号をまとめて除去する(例: カッコ・ハイフンなど)
const s = "(ABC-123)";
const cleaned = s.replace(/[()()-]/g, "");
console.log(cleaned); // "ABC123"

このように、replace()+正規表現を使えば「何を削除・置換するか」をパターンとして定義できます。trim()でカバーできない要件が出たら、対象文字(空白/全角スペース/記号など)と対象位置(前後/途中/全体)を切り分けて、正規表現で明確に実装するのがポイントです。

空白以外の削除にも応用する(ハイフン・記号など)

javascript+trim+regex

JavaScriptの文字列整形では「javascript trim」で前後の空白を取り除くのが定番ですが、実務では空白以外にも「入力を揃えたい(正規化したい)」ケースが多くあります。例えば、電話番号のハイフン、商品コード中の区切り記号、ユーザーが混ぜて入力した各種記号などです。こうした“特定文字の除去”は、trim()ではなく置換処理(replace/replaceAll)を使うことで実現できます。

置換(replace/replaceAll)で「削除」を実現する考え方

JavaScriptで文字を「削除」したいときは、対象を空文字('')に置換するのが基本です。つまり「削除=空文字に置き換える」という発想です。ここで重要なのは、置換対象が1回だけ現れるのか、複数回現れるのかで使い分けが必要な点です。

  • replace(検索, 置換):原則として最初に一致した1箇所のみを置換
  • replaceAll(検索, 置換):一致したすべての箇所を置換(文字列指定でも全置換)

例えばハイフンを消す場合、「最初の1個だけ消えればいい」ことは少なく、多くは“全てのハイフン”を取り除きたいはずです。そのため、次のいずれかの方法を選ぶのが定石です。

  • replaceAll('-', '')で全てのハイフンを削除する
  • replace(/-/g, '')のように正規表現のグローバル指定で全置換する

また、対象がハイフンだけでなく「スペースも混ざる」「全角記号が混ざる」など複雑になる場合は、正規表現で“許可しない文字をまとめて消す”設計にするとメンテナンスしやすくなります(例:数字以外を削除する、など)。

電話番号などからハイフンを取り除く例

フォーム入力やCSVの取り込みでは、電話番号が090-1234-5678のようにハイフン付きで渡ってくることがよくあります。データベース保存や突合の前処理として、ハイフンを除去して数字だけに揃えるのが典型例です。

// ハイフンをすべて削除(置換で「削除」を実現)
const tel1 = '090-1234-5678';
const normalized1 = tel1.replaceAll('-', '');
console.log(normalized1); // "09012345678"

もし入力にハイフンが複数種類(例:全角の「-」や長音「ー」)混在する可能性があるなら、代表的な記号をまとめて除去するのも実務的です。

// ハイフンっぽい記号をまとめて削除(半角/全角などの揺れ対策)
const tel2 = '090-1234ー5678'; // 全角ハイフン/長音が混ざる例
const normalized2 = tel2.replace(/[-ー-]/g, '');
console.log(normalized2); // "09012345678"

さらに「数字以外はすべて不要」という要件であれば、“消したい文字を列挙する”より“残したい文字だけを定義する”ほうが強くなります。電話番号の正規化では、数字以外をまとめて削除するアプローチが分かりやすいです。

// 数字以外を削除(ハイフンやスペース等が何でも混ざっても数字だけ残す)
const tel3 = ' 090-1234 5678 ';
const normalized3 = tel3.replace(/[^0-9]/g, '');
console.log(normalized3); // "09012345678"

このように、javascript trimが担う「空白の除去」とは別に、replace/replaceAllを使えばハイフンや記号などの削除にも柔軟に応用できます。用途に応じて「特定の記号を消す」のか「数字だけ残す」のかを選ぶと、入力ゆれに強い前処理になります。

仕様・互換性・注意点

javascript+trim+compatibility

仕様(標準化状況)

javascript trim は、文字列の先頭と末尾にある「空白類」を取り除くための標準的なメソッドとして仕様化されています。実装は各ブラウザ任せの独自仕様ではなく、ECMAScript(JavaScriptの言語仕様)で定義されているため、同じ入力に対して基本的に同じ結果が得られるのが特徴です。

また、仕様上は「どの文字が空白として扱われるか」も定義されており、一般的な半角スペースだけでなく、タブや改行、その他の空白文字も対象になります。つまり、trim() は「見た目では区別しにくい余分な空白」が混ざっていても、仕様に沿って一定のルールで除去できるメソッドです。

ブラウザ互換性と古い環境での注意

trim() は現在の主要ブラウザでは広く利用できますが、古いブラウザや古いJavaScriptエンジンでは未実装の可能性があります。特にレガシー環境(古い端末、組み込みブラウザ、古い社内システムのブラウザなど)をターゲットにする場合は、動作確認が重要です。

古い環境での代表的な注意点は次のとおりです。

  • trim() が存在しない"text".trimundefined となり、呼び出すとエラーになるケースがあります。

  • 互換性の確認が必要:ブラウザ・実行環境(WebView、古いNode.jsなど)によってサポート状況が異なるため、要件に合わせて確認します。

  • 未対応環境では代替が必要:未実装が想定される場合は、ビルド時のトランスパイルやポリフィルの導入を検討します(「対応するための追加実装が必要になる」点が注意事項です)。

「どの環境までサポートするか」を先に決めたうえで、trim() 前提で問題ないかを判断すると、後戻りが少なくなります。

破壊的変更ではない点(元文字列は変わらない)

javascript trim の重要な注意点として、trim() は破壊的変更(ミューテート)をしないことが挙げられます。つまり、trim() を呼び出しても元の文字列そのものは書き換わらず、空白を除去した新しい文字列が返ってきます。

この性質を理解していないと、「trim() したのに元データの空白が残っている」ように見えて混乱することがあります。例えば、変数に再代入していない場合、元の文字列はそのままです。

const s = "  hello  ";
s.trim();           // 返り値は "hello"
console.log(s);     // 元の s は "  hello  " のまま

元の変数として空白除去後の値を使いたい場合は、返り値を受け取って扱う必要があります。trim() が非破壊である点は、安全に使える一方で「返り値を使う」意識が必要なポイントです。