JavaScriptで漢字を表す正規表現

Pocket

正規表現を使って漢字を表す方法を毎回、忘れてしまい、その都度、調べています。
調べた結果をまとめてみました。今回はJavaScriptの場合です。

正しくない方法

JavaScriptの正規表現はUnicode(UTF16)で判定される。

最近のJavaScriptではエンコードに関わらずUnicodeが使われるらしい。
「charset=shift_jis」としてもUnicodeで判定される。
charCodeAtで表示されるコードはUnicodeによるものである。

ネットで調べると正規表現で漢字を「亜-熙」と指定する方法が紹介されている。

「亜」U+4E9C
「熙」U+7199

これはシフトJISによる順序なので、JavaScriptでは使えない。
例えば、次のようにJavaScriptで「一」を調べるとマッチしない。

t = "一";
m = t.match(/[亜-熙]/);

「一」U+4E00

であるので、「一」<「亜」<熙」となってしまうためである。

CJK統合漢字

JavaScriptでは「一-龠」と指定する方法が紹介されている。

「一」U+4E00
「龠」U+9FA0

常用漢字には2136個あるがUnicode順に並べると先頭が「一」で末尾が「齢」になる。

「一」U+4E00
「齢」U+9F62

したがって常用漢字は「一-龠」に収まる。
「一-龠」は「\u4E00-\u9FA0」とも書ける。
これを使って、もっと広めに「\u4E00-\u9FFF」と書いてもよい。これはCJK統合漢字の範囲である。この後はイ文字という中国の少数民族の文字になるらしい。

その他の漢字

一般的だが、CJK統合漢字にない漢字もある。
例えば常用漢字以外に名前に使える人名用漢字というのがある。
丑(U+4E11)から響(響の異体字、U+FA69)までが該当する。
これらはCJK統合漢字ではなく、CJK互換漢字という範囲「\uF900-\uFAFF」にある。

また「々」(U+3005)、「〇」(U+3007)を漢字とするかどうかは場面によって変わる。

漢字のみをすべて網羅するのは難しい。

まとめ

「一から龠まで」または「CJK統合漢字」を指定する。
漢字が含まれるかどうかを判定するのであればこれが現実的。

m = t.match(/[一-龠]/);
m = t.match(/[\u4E00-\u9FFF]/);

[ 2015年9月14日 | カテゴリー: JavaScript | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報