Perl CGI でフォームからの絵文字入力を制限する方法

3キャリアの絵文字コード

3キャリアの絵文字のコードは、以下の範囲となります。(16進数表記。)

Docomo の絵文字コード

Docomo
(2バイトで1文字)
1バイト目 2バイト目
F8 9F-FC
F9 40-49,50-42,55-57,5B-5E,72-FB

EZ Web の絵文字コード

EZ Web
(2バイトで1文字)
1バイト目 2バイト目
F3,F6,F7 40-FC
F4 40-8D

Vodafone の絵文字コード

Vodafone
(エスケープシーケンスを使用)
エスケープシーケンス開始 各絵文字に対応 エスケープシーケンス終了
1バイト目 2バイト目以降(※2)
1B24 45,46,47 21-7A 0F
4F 21-6D
50 21-6C
51 21-59

※2:1バイト目が共通の絵文字なら、2バイト目以降を繰り返せば1バイトで絵文字1文字に対応

3キャリアの絵文字の Perl 正規表現

それぞれのコードを Perl の正規表現で表すと以下の通りです。

Docomo (?:(?:\xf8[\x9f-\xfc])|(?:\xf9[\x40-\x49\x50-\x52\x55-\x57\x5b-\x5e\x72-\xfb]))
EZ Web (?:(?:[\xf3\xf6\xf7][\x40-\xfc])|(?:\xf4[\x40-\x8d]))
Vodafone \x1b\x24[GEFOPQ][\x21-\x7a]*\x0f #少々簡略