PHPで全角スペースをトリムする方法

こんにちは、さるまりんです。

関数trim()では半角スペースやタブ文字などを文字列の前後から削除してくれます。これには全角スペースは削除されません。マルチバイト文字列を処理するmb_関数群にはmb_trimは用意されていないようです。

なので全角スペースを含めて削除する関数を実装してみました。

function mbtrim($str) {
    return preg_replace("/(^\s+)|(\s+$)/u", "", $str);
}

いくつかの文字列に対して実行してみます。

$str1 = " a b c ";
$str2 = " a b c ";
$str3 = "  a b c     ";

echo "[" . mbtrim($str1) . "]\n";
echo "[" . mbtrim($str2) . "]\n";
echo "[" . mbtrim($str3) . "]\n";

$str1は前後に半角スペース、$str2は全角スペース、$str3は半角・全角スペースの他にタブ文字があります。

実行結果です。

[a b c]
[a b c]
[a b c]

前後の文字が削除されていますね。

同じことをしてくれる関数をもう一つ書いてみました。

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

違いは後者は文字列の先頭を\Aで、終わりを\zで指定しています。

同じ文字列に対して実行例です。

$str1 = " a b c ";
$str2 = " a b c ";
$str3 = "  a b c     ";

echo "[" . zenkakutrim($str1) . "]\n";
echo "[" . zenkakutrim($str2) . "]\n";
echo "[" . zenkakutrim($str3) . "]\n";

実行結果です。

[a b c]
[a b c]
[a b c]

前後の文字が削除されて、同じ結果になりましたね。

名前や住所を入力してもらった時になぜか最後に全角スペースがあってそれをとってあげないといけないことがあったので作ってみました。

もっとスマートなやり方があるのかもしれないですね。いい方法があったらまた書かせてもらいます。

読んでくださってありがとうございました。

それではまた!