(78) 全角スペースを trimで除去したい。

投稿者: | 2022年3月29日

150 views

1. やりたいこと

PHPの関数 trim($str) では、
文字列 $str の前後に付いた空白文字を除去してくれる。

しかし…
全角スペースは、空白文字として認識してくれない。

これに対応した処理、すなわち、おそらく誰もが検索してみたに違いない
mb_trim($str)
を実装してみたい。

2. やってみる

PHPの関数 preg_replace() では
パターンに空白文字「\s」を指定すると、半角スペース、全角スペース、タブ文字に対して処理してくれる。
これを使おう。

PHP公式リファレンス: preg_replace

(1) シンプル実装

こんな関数を作ってみる。

function mb_trim( $str ){
  return preg_replace("/\A\s+|\s+\z/u", "", $str);
}

第一パラメーターのパターンは以下のように読めばよい。
\A\s+ → 先頭「\A」から空白文字「\s」が一個以上「+」存在する場合
 もしくは「|
\s+\z → 終端「\z」まで空白文字「\s」が一個以上「+」存在する場合

あっ…
u は Unicodeであることを表す。

すなわち、関数 preg_replaceに対して、
このパターンにマッチした文字(=文頭 or 文末の空白文字)は消去「”」(=文字無しに変換)してよ
と指示しているのだ。

実際に使ってみる。
以下のようなサンプルプログラムを動かしてみた。

echo ' (1)['.mb_trim(" ABCDEFG ").']';    // 前後に半角スペース
echo ' (2)['.mb_trim(" ABCDEFG ").']';  // 前後に全角スペース
echo ' (3)['.mb_trim("	ABCDEFG	").']';   // 前後にタブ文字

実行結果は以下の通り。
https://www.dogrow.net/php/sample/00078/

ちょっと見づらければ、以下のように空白文字指定を [ ] で括ってもよい。
[ ]内の任意の一文字にマッチした場合を指示する構文だが、中身が一文字だけでもよいのだ。

function mb_trim( $str ){
  return preg_replace("/\A[\s]+|[\s]+\z/u", "", $str);
}

少し見やすくなったかも。


コメントを残す

メールアドレスが公開されることはありません。


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)