(2009/06/29)追記4:本記事のmb_trim関数が動かない環境があったので、詳細を「PCREはUnicode文字プロパティをサポートするとは限らない」にまとめました。よりポータブルなmb_trim関数も紹介していますので、併せてご覧ください。
追記:「mb_ereg_match('^[\0[:space:]]+$', $str);」で、今回pregで作った正規表現'/^[\s\0\x0b\p{Zs}\p{Zl}\p{Zp}]+$/u'と同一になりました。mb_regex_encoding関数が使える分だけmb_ereg版の方が使い勝手も上です。ちょっとショック。
(2009/02/24 17:00)追記2:もっと簡潔に、「mb_ereg_match('^[\0\s]+$', $str);」でいいことがわかりました。POSIX正規表現風の表記がキモいな、と思っていたので、これは素晴らしい。参考資料:http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
(2009/02/26 12:00)追記3:mb_regex_encoding関数でSJISやEUC-JPを指定した場合、\sなどでは全角スペースにマッチしません。ですので、上の「追記」の内容はUTF-8専用くらいに考えた方が良さそうです。mb_ereg系関数は、Unicode系のエンコーディングとその他のエンコーディングの場合とで挙動が結構変わるようですね。
PHPのtrim関数というのは、文字列の先頭および末尾にあるホワイトスペースを取り除く関数です。しかし、実際には全角空白も除去したいよね、ということがよくあります。
さらに内部エンコーディングがUTF-8の場合、全角空白だけ除去すればいいのか?他にも除去すべき文字があるんじゃないか?という疑問がわいてきます。今回はそんな疑問からスタートして、マルチバイト文字もうまく扱えるtrim関数を作ってみました。
続きを読む