2,868 views
この記事は最終更新から 919日 が経過しています。
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); }
少し見やすくなったかも。