Home JavaScript Greasemonkey PHP

PHP で日本語のひらがなとカタカナと漢字を判別する方法 [UTF-8編]2009-01-28


ちょっと思うところあって調べたのでメモしておきます。
結局使わない事になったんですが。
mb_regex_encoding('UTF-8');
if (preg_match("/^[ぁ-んー]+$/u", $str)) {
    // ひらがな
} else if (preg_match("/^[ァ-ヶー]+$/u", $str)) {
    // カタカナ
} else if (preg_match("/^[一-龠]+$/u", $str)) {
    // 漢字
}
mb_regex_encoding('UTF-8'); は正規表現の基準となる文字コードの指定です。
php.ini がいじれる環境なら、[mbstring] セクションに、mbstring.internal_encoding = UTF-8 とした方が良いかと思います。

[あ-ん] 等の指定は、Unicode 上でひらがなやカタカナを表す文字コードの最初と最後の文字を、範囲指定しています。
また、厳密に言うと漢字の最後は "龠" では無いのですが、一般的に漢字と見なされる範囲の中で、最後にある JIS 第二水準の漢字であるため、この字を採用しています。(この漢字の範囲には、中国の漢字やハングルなどが含まれます)
全然異なる文脈ですが、このページで詳しく考察されています。

preg_match の u フラグは、UTF-8 を正しく扱えるようにするためのフラグです。これがないと、文字コードの範囲指定などが正しく動作しないようです。

カテゴリ: Development タグ: php utf-8