1. ホーム
  2. PHP

【PHP】trim・ltrim・rtrim・str_pad の使い方|文字列の空白除去と桁揃え

Share

フォームから受け取った文字列の前後に余計な空白が付いていたり、番号を「001」「002」のように桁を揃えて表示したかったり——文字列の「整え」はプログラムで頻繁に登場します。PHP では、前後の空白を取り除く trimltrimrtrim と、指定の桁数まで文字で埋める str_pad がこの役割を担います。この記事では、それぞれの基本的な使い方と引数の意味、フォーム入力の整形やゼロ埋めといった実践例、そして「全角スペースが trim で消えない」というつまずきまでを、初心者の方にも分かるように解説します。

trim で文字列の前後の空白を取り除く

trim は、文字列の先頭と末尾にある空白文字を取り除いて、新しい文字列を返す関数です。元の文字列は変更されず、整えた結果が戻り値として返ってくる点に注意してください。引数を1つだけ渡したときは、半角スペードのほか、タブや改行といった代表的な空白文字がまとめて削除されます。

trim.php
<?php
$input = "  hello  ";

$result = trim($input);

echo "[" . $result . "]"; // [hello](前後の空白が消える)
echo "[" . $input . "]";  // [  hello  ](元の変数はそのまま)

引数なしの trim が取り除くのは、半角スペース・タブ(\t)・改行(\n\r)・ヌル文字・垂直タブの6種類です。文字列の「途中」にある空白は対象外で、あくまで先頭と末尾だけが処理されます。

ltrim と rtrim で片側だけ削る

前後どちらか一方だけを削りたいときは、ltrimrtrim を使います。名前の l は left(左=先頭)、r は right(右=末尾)を表します。3つの関数の違いを整理すると次のとおりです。

関数削る位置
trim($str)先頭と末尾の両方
ltrim($str)先頭(左側)だけ
rtrim($str)末尾(右側)だけ
trim_side.php
<?php
$str = "  hello  ";

echo "[" . ltrim($str) . "]"; // [hello  ](先頭だけ削る)
echo "[" . rtrim($str) . "]"; // [  hello](末尾だけ削る)

第2引数で削る文字を指定する

trim 系の関数は、第2引数に「削りたい文字」を渡すと、空白の代わりにその文字を取り除きます。たとえば文末のスラッシュや、行頭の記号を取り除くといった用途で便利です。第2引数に複数の文字を書くと、そのいずれかに当てはまる文字が端から削られていきます(文字の集合として扱われます)。

trim_chars.php
<?php
$url = "https://example.com/";

// 末尾のスラッシュだけを取り除く
echo rtrim($url, "/"); // https://example.com

$code = "###見出し###";

// 前後の # をまとめて取り除く
echo trim($code, "#"); // 見出し

URL の末尾スラッシュをそろえる処理は実務でよく使うので、rtrim($url, "/") の形は覚えておくと役立ちます。

フォーム入力の整形に使う

trim がもっとも活躍するのが、フォームから送られてきた値の整形です。利用者が誤って先頭や末尾にスペースを入れてしまうことはよくあり、そのまま保存すると検索やログイン照合がうまくいかない原因になります。受け取った直後に trim をかけておくのが定番です。

form.php
<?php
// 受け取った値の前後の空白を取り除いてから扱う
$name = trim($_POST["name"] ?? "");

if ($name === "") {
    echo "名前を入力してください";
} else {
    echo htmlspecialchars($name) . " さん、こんにちは";
}

ここでは trim を先にかけることで、スペースだけが入力された値を「空」と判定できるようにしています。空白を残したまま === "" で判定すると、スペースだけの入力をすり抜けてしまうため、この順番が重要です。

str_pad で指定の桁数まで文字を埋める

逆に、文字列を一定の長さまで「埋めて」そろえたいときに使うのが str_pad です。番号を「001」のようにゼロ埋めしたり、項目名を一定の幅で右寄せ・左寄せしたりするのに使います。基本の書き方は次のとおりです。

str_pad.php
<?php
// str_pad(元の文字列, 目標の長さ, 埋める文字, 埋める位置)
echo str_pad("7", 3, "0", STR_PAD_LEFT); // 007
echo str_pad("42", 3, "0", STR_PAD_LEFT); // 042

str_pad は最大4つの引数をとります。第1引数が元の文字列、第2引数がそろえたい長さ、第3引数が埋めるのに使う文字(省略すると半角スペース)、第4引数が埋める位置です。第2引数の長さより元の文字列がすでに長い場合は、何も埋めずにそのまま返されます。

第4引数の定数埋める位置
STR_PAD_RIGHT右側を埋める(既定)。文字列は左寄せになる
STR_PAD_LEFT左側を埋める。文字列は右寄せ・ゼロ埋めになる
STR_PAD_BOTH両側を均等に埋める(中央寄せ)
str_pad_align.php
<?php
$items = ["りんご", "コーヒー豆", "塩"];

foreach ($items as $item) {
    // 商品名を全角6文字ぶんの幅で右側に空白を足してそろえる
    echo str_pad($item, 12) . "| 在庫あり\n";
}

ゼロ埋めは伝票番号や日付の整形で頻出します。たとえば str_pad($month, 2, "0", STR_PAD_LEFT) とすれば、303 にそろえられます。

全角スペースが trim で消えない原因

日本語のフォーム入力で起こりがちなのが、「全角スペースが trim で取り除けない」という問題です。引数なしの trim が削るのは半角の空白文字だけで、全角スペース(U+3000)は対象に含まれていません。そのため、利用者が全角で空白を入力すると残ってしまいます。

対処は2通りあります。1つは trim の第2引数に全角スペースを明示的に渡す方法です。もう1つは、先に全角スペースを半角に変換してから trim をかける方法で、入力のゆれをまとめて吸収したいときに向いています。

trim_zenkaku.php
<?php
$input = " 全角スペース付き "; // 前後が全角スペース

// 方法1: 第2引数で半角・全角スペースの両方を指定する
$result = trim($input, " \t\n\r\0\x0B ");
echo "[" . $result . "]"; // [全角スペース付き]

// 方法2: 全角スペースを半角に変換してから trim する
$result = trim(str_replace(" ", " ", $input));
echo "[" . $result . "]"; // [全角スペース付き]

方法1の第2引数では、既定で削られる半角の空白文字( \t\n\r\0\x0B)も忘れず一緒に書いておくのがポイントです。第2引数を指定すると既定の削除対象は上書きされるため、全角スペースだけを書くと今度は半角スペースが残ってしまうからです。

まとめ

trim 系と str_pad は、文字列を「削って整える」「埋めてそろえる」ための基本関数です。要点を振り返ります。

  • trim は前後、ltrim は先頭、rtrim は末尾の空白を取り除く
  • 第2引数に文字を渡すと、空白の代わりにその文字(集合)を端から削る
  • フォーム入力は受け取った直後に trim し、空白だけの入力を弾く
  • str_pad は目標の長さまで文字を埋める。STR_PAD_LEFT でゼロ埋め・右寄せができる
  • 元の文字列が目標の長さ以上なら str_pad は何もしない
  • 全角スペースは既定の trim では消えないので、第2引数で指定するか半角に変換する

入力値はまず trim で整える、出力の桁は str_pad でそろえる——この2つを習慣にしておくと、データの不揃いによる細かな不具合を未然に防げます。

参考ページ