PHPで文字列の最初と最後の半角、全角スペースを取り除く

文字列の最初と最後のスペースを取り除きたい

PHPのtrim()を使おうと思ったら、残念ながら全角スペースは取り除かれない仕様だった。
半角スペースだけじゃなく全角スペースも除きたかったので、その実装をメモしておく。

PHPのtrim()について

PHPのtrim()の仕様は以下。

この関数は str の最初および最後から空白文字を取り除き、 取り除かれた文字列を返します。2番目のパラメータを指定しない場合、 trim()は以下の文字を削除します。

  • " " (ASCII 32 (0x20)), 通常の空白。
  • "\t" (ASCII 9 (0x09)), タブ。
  • "\n" (ASCII 10 (0x0A)), リターン。
  • "\r" (ASCII 13 (0x0D)), 改行。
  • "\0" (ASCII 0 (0x00)), NULバイト
  • "\x0B" (ASCII 11 (0x0B)), 垂直タブ

PHP: trim - Manual

というわけで、trim()では全角スペースは除去されない。

また、第2引数で取り除く文字を指定できるのだが
trim()はマルチバイトに対応していないため、正常動作しない模様。

正規表現を使う

PHPのtrimって、全角の空白(スペース)は削除してくれないのですか? - メモ帳@プログラマー初級

こちらを参考に、正規表現を使って全角スペースの除去ができた。

function trim_emspace ($str) {
    // 先頭の半角、全角スペースを、空文字に置き換える
    $str = preg_replace('/^[  ]+/u', '', $str);
    // 最後の半角、全角スペースを、空文字に置き換える
    $str = preg_replace('/[  ]+$/u', '', $str);
    return $str;
}

全角スペースを半角スペースに置換する

2012/06/24 追記
この方法だと、最初と末尾以外の全角スペースも半角になってしまうため、trim()と動作が変わってしまっていました。
mb_convert_kana()の紹介と、自戒の念も込めて、ソースは残しておきます。

上記の正規表現での実装をしてみて、できたよー(^O^)/ と思ったのだが
あとから考えたら、全角スペースを半角スペースに置換すれば、そのままtrim()が使えるんじゃね?あたしって、ほんとバカ
という事に気付いたので、これも書いておく。

置換には[全角] - [半角]の変換ができる、mb_convert_kana()を使う。

// 第2引数に"s"を指定で、全角スペースを半角スペースに変換
$str = trim(mb_convert_kana( $str, "s"));

mb_convert_kana()の第2引数で使用可能な変換オプションについてはマニュアル参照。
ちなみに mb_convert_kana()は、日本語のみで使用可能。

こっちの方がシンプル。
ていうかこっち使えよバカ。

プロになるための PHPプログラミング入門
星野 香保子
技術評論社
売り上げランキング: 13,847