概要
- PHPには
trim
系の関数が準備されているが、全角スペースには対応していない str_replace()
を使うと、前後だけでなく文字列中のスペースが除去されてしまう- そこで、
preg_replace()
で正規表現によって前後のスペースだけ除去する
実装例
以下のコードの関数の中でトリムを実装している。
1 2 3 4 5 6 7 8 9 |
function trim_preg($str) { return preg_replace("/\A[\x20\xE3\x80\x80]++|[\x20\xE3\x80\x80]++\z/u", '', $str); } $en = ' a b c '; $jp = ' い ろ は '; echo '|', trim_preg($en), '|', '<br>'; echo '|', trim_preg($jp), '|', '<br>'; |
第1引数でサーチする文字、第2引数でマッチした文字の変更後の文字、第3引数で対象文字列を指定。
第1引数は「先頭か末尾にある半角か全角のスペース」を表現しているが、その過程は以下のとおり。
'/.../u'
で正規表現の文字列をUTF-8として扱う'/\A...|...\z/'u
で先頭部分か末尾部分を指定[\x20\xE3\x80\x80]
は文字クラスで、\x20
が半角スペース、\xE3\x80\x80
が全角スペースを表し、それらの何れかの文字を指定[]++
文字クラスの後の++は絶対量指定子と呼ばれるもので、通常使われる最大量指定子+
(1文字以上にマッチ)に対してバックトラックが抑制されるとのこと
その他の文字のトリム
文字クラス[]
の中に指定する文字列。
\p{Z}
- 区切り文字(半角・全角スペースも含まれる)。
\p{C}
- その他の文字(制御文字)。