▽1
●
a-kuma3 ●300ポイント ![]() |
「日本語」というのをどう考えるか、というのがあるのですが、肯定的先読みと肯定的後読みを使うと それっぽいことができます。
こちらは、「日本語」=「英数字ではない」とした場合のコード。
<?php function chink_space($s) { $s = preg_replace('/(?<=[^A-z0-9]) +(?=[^A-z0-9])/', '', $s); return $s; }
複数の空白が続いた場合も消すようにしてます。
PHP 5.1.0 以降で、対象のテキストが Unicode の場合には、Unicode 文字プロパティ というのが使えます。
http://php.net/manual/ja/regexp.reference.unicode.php
その Unicode 文字プロパティを使ってみると、こう書けます。
<?php function chink_space($s) { $s = preg_replace('/(?<=[\p{Han}\p{Hiragana}\p{Katakana}]) +(?=[\p{Han}\p{Hiragana}\p{Katakana}])/u', '', $s); return $s; }
パターン修飾子の u がポイント。
プログラム的には、同じものが二回出てくるので、こんな感じに書いた方が良いのかもしれません。
<?php function chink_space($s) { $k = '[^A-z0-9]' $s = preg_replace('/(?<=' . $k . ') +(?=' . $k . ')/', '', $s); return $s; }
正規表現が見づらくなるわけですが。
ideone.com で試したのがこちら。
http://ideone.com/Izxwep