サンプル・プログラムの実行例
サンプル・プログラム
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 文字プロパティを使うことにする。
(※)特定の漢字でスペースが入らないことを「みんなの知識 ちょっと便利帳」管理者様からご指摘をいただき、漢字の範囲指定が甘かったことに気づきました。ありがとうございます。
解説:漢字=半角英数字の間に半角スペースを挿入する
0189: /**
0190: * 漢字=半角英数字の間に半角スペースを挿入する
0191: * @param string $sour 変換前文字列
0192: * @param string $mode 'space' \x20を挿入する/'html' を挿入する
0193: * @return string変換後文字列
0194: */
0195: function add_space($sour, $mode) {
0196: $sp = ($mode == 'html') ? ' ' : ' ';
0197: //合致パターン
0198: $reg[1] = '/([0-9A-Za-z]+)([\p{Han}\p{Hiragana}\p{Katakana}]+)/u'; //Ver.2.1
0199: $reg[2] = '/([\p{Han}\p{Hiragana}\p{Katakana}]+)([0-9A-Za-z]+)/u'; //Ver.2.1
0200: //置換パターン
0201: $rep[1] = "$1{$sp}$2";
0202: $rep[2] = "$1{$sp}$2";
0203:
0204: $dest = $sour;
0205: foreach ($reg as $key=>$val) {
0206: $dest = preg_replace($val, $rep[$key], $dest);
0207: }
0208:
0209: return $dest;
0210: }
活用例
参考サイト
- 全角カンマ/ピリオドを句読点に置換する:ぱふぅ家のホームページ
- 日本語全角文字と半角英数字の間に半角スペースを入れる:みんなの知識 ちょっと便利帳
いちいち手作業で半角スペースを挿入するのも面倒なので、今回は、PHP で自動的に半角スペースを挿入するプログラムを作ってみることにする。
(2021年8月16日)PPHP8対応,リファラ・チェック改良