サンプル・プログラムの実行例

サンプル・プログラム
add_space.php | サンプル・プログラム本体 |
プログラムの方針
- 半角英数字が1つ以上並んでいる■日本語文字が1つ以上並んでいる
- 日本語文字が1つ以上並んでいる■半角英数字が1つ以上並んでいる

ところで、本シリーズのプログラムは内部のテキスト処理を UTF-8 で行うようにしているのだが、「Unicode=古今東西のあらゆる文字を収録」で紹介したように、UTF-8 のベースとなっている Unicode は JISコード と違って漢字の範囲を指定しにくい。

一方、PHPの正規表現は、Unicode 文字プロパティとして、あらたなエスケープシーケンスが導入されている。
たとえば、 \p{Han} は漢字1文字に、\p{Hiragana} は平仮名1文字に、\p{Katakana} はカタカナ1文字に、それぞれマッチする。
そこで、冒頭のパターンのマッチングには、Unicode 文字プロパティを使うことにする。

(※)特定の漢字でスペースが入らないことを「みんなの知識 ちょっと便利帳」管理者様からご指摘をいただき、漢字の範囲指定が甘かったことに気づきました。ありがとうございます。
解説:漢字=半角英数字の間に半角スペースを挿入する
189: /**
190: * 漢字=半角英数字の間に半角スペースを挿入する
191: * @param string $sour 変換前文字列
192: * @param string $mode 'space' \x20を挿入する/'html' を挿入する
193: * @return string 変換後文字列
194: */
195: function add_space($sour, $mode) {
196: $sp = ($mode == 'html') ? ' ' : ' ';
197: //合致パターン
198: $reg[1] = '/([0-9A-Za-z]+)([\p{Han}\p{Hiragana}\p{Katakana}]+)/u'; //Ver.2.1
199: $reg[2] = '/([\p{Han}\p{Hiragana}\p{Katakana}]+)([0-9A-Za-z]+)/u'; //Ver.2.1
200: //置換パターン
201: $rep[1] = "$1{$sp}$2";
202: $rep[2] = "$1{$sp}$2";
203:
204: $dest = $sour;
205: foreach ($reg as $key=>$val) {
206: $dest = preg_replace($val, $rep[$key], $dest);
207: }
208:
209: return $dest;
210: }
活用例
参考サイト
- 全角カンマ/ピリオドを句読点に置換する:ぱふぅ家のホームページ
- 日本語全角文字と半角英数字の間に半角スペースを入れる:みんなの知識 ちょっと便利帳
いちいち手作業で半角スペースを挿入するのも面倒なので、今回は、PHP で自動的に半角スペースを挿入するプログラムを作ってみることにする。
(2021年8月16日)PPHP8対応,リファラ・チェック改良