PHPプログラミング

ベストプラクティス

文字列中の空白(スペース・タブ)を除去

  • このエントリーをはてなブックマークに追加

フォームなどの入力値として受け付けた文字列のデータに対し、不要な空白を取り除きたい場合があります。今回はその方法を解説します。

目次

  1. #  概要
  2. #  ltrim関数
  3. #  rtrim関数
  4. #  trim関数
  5. #  ltrim関数、rtrim関数、trim関数で全角スペースも除去する
  6. #  str_replace関数
  7. #  preg_replace関数
  8. #  結局どの方法を使えばいいの?

概要

プログラミングにおいて、文字列に含まれるスペースやタブが邪魔になることがあります。例えば、フォームなどユーザーの入力した値を受け付ける場合、メールアドレスやパスワードにおいては基本的に空白が含まれているとあまり都合が良くありません。しかし、入力ミスで入力値の前後に空白が入ってしまうことがあります。

そこで今回は、次の5つの方法を使った文字列に含まれる空白を取り除く方法をみていきます。

  • ltrim関数 – 文字列の先頭にある空白を除去
  • rtrim関数 – 文字列の末尾にある空白を除去
  • trim関数 – 文字列の先頭・末尾にある空白を除去
  • str_replace関数 – 文字列に含まれる全ての空白を除去
  • preg_replace関数 – 文字列に含まれる全ての空白を除去。str_replace関数よりも細かい条件指定が可能。

上の3つは半角スペース、Tab入力のスペースに対しては有効ですが、全角スペースには対応していません。全角スペースも含めて取り除きたい場合は、下の2つの関数を使う必要があります。

それでは、1つずつみていきましょう。

ltrim関数

文字列の先頭にある空白(半角スペース、Tab)を除去する関数です。

コード

$string = "		Text image Sample   ";

// 空白を除去する前
var_dump($string);

// 空白除去を実行
$string = ltrim($string);

// 空白を除去した後
var_dump($string);

実行結果

ltrim関数の実行結果

rtrim関数

文字列の末尾にある空白(半角スペース、Tab)を除去する関数です。

コード

$string = "		Text image Sample   	";

// 空白を除去する前
var_dump($string);

// 空白除去を実行
$string = rtrim($string);

// 空白を除去した後
var_dump($string);

実行結果

rtrim関数の実行結果

trim関数

文字列の先頭・末尾にある空白(半角スペース、Tab)を除去する関数です。

コード

$string = "		Text image Sample   	";

// 空白を除去する前
var_dump($string);

// 空白除去を実行
$string = trim($string);

// 空白を除去した後
var_dump($string);

実行結果

trim関数の実行結果

ltrim関数、rtrim関数、trim関数で全角スペースも除去する

3つの関数は、2つ目のパラメータに除去したい文字を指定することができます。ここで半角スペース、全角スペース、Tabの3種類を指定すると、全角スペースも取り除くことが可能になります。

今回は空白の除去として使っていますが、任意の文字列を指定することも可能です。その場合、先頭や末尾に該当する文字列があったら除去を行います。

コード

$string = "		Text image Sample  ";

// 空白を除去する前
var_dump($string);

// 空白除去を実行
$string = trim($string, '  	');

// 空白を除去した後
var_dump($string);

実行結果

trim関数に2つ目のパラメータを指定

str_replace関数

文字列中に含まれる、指定した文字を置換する関数です。この関数は空白文字以外に対しても使用できますが、ここでは空白を「空文字」に置換することで除去を行います。

コード

$string = "		Text image Sample  ";

// 空白を除去する前
var_dump($string);

// 空白除去を実行
$string = str_replace( array( " ", " ", "	"), "", $string);

// 空白を除去した後
var_dump($string);

実行結果

str_replace関数の実行結果

解説

str_replace関数の引数は、前から順に「検索する文字」、「置換した後の文字」、「検索対象の文字列」です。検索する文字が複数ある場合、配列形式で指定します。

今回は半角スペース、全角スペース、Tabの3つの空白を配列形式にして指定し、その全てを「空文字」に置換しています。そのため、先頭・末尾に関わらず文字列中の単語を区切る半角スペースも取り除かれています。文字列中の空白については除去をしたくない場合は、次のpreg_replace関数を使います。

preg_replace関数

正規表現を使い、文字列中に含まれる該当する文字を置換する関数です。この関数もstr_replace関数同様、空白文字以外に対しても使用しますが、ここでは空白を「空文字」に置換することで除去を行います。

コード

$string = "  	Text image Sample  	";

// 空白を除去する前
var_dump($string);

// 空白除去を実行
$string = preg_replace( "/^(  	)|(  	)$/", "", $string);

// 空白を除去した後
var_dump($string);

実行結果

preg_replace関数の実行結果

解説

preg_replace関数の引数は、前から順に「検索する文字」、「置換した後の文字」、「検索対象の文字列」です。検索する文字は正規表現の形式で指定します。

正規表現の基本的な使い方は「文字列に特定の文字(単語)が含まれるか検索」を参照してください。

今回はデリミタ「^」と「$」を使い、文字列の先頭か末尾にある半角スペース、全角スペース、Tabの3つの空白を検索しています。そして、該当する文字は「空文字」へ置換します。

結局どの方法を使えばいいの?

空白を取り除くにはいくつかの方法がありますが、多くの場合はtrim関数に2つ目のパラメータを指定する形がもっとも使いやすいです。

一方、文字列の先頭・末尾のみでなく全ての空白を除去したい場合は、str_replace関数を使います。preg_replace関数でも同じことができますが、処理速度は(本当にわずかですが)str_replace関数の方が速いです。

preg_replace関数を使うケースは、空白以外にも除去したい文字列がある場合など、ある程度細かい条件指定が必要な場合に限ります。

  • このエントリーをはてなブックマークに追加