« 一食の生活が続きます | メイン | 全角英数字 ⇔ 半角英数字 »

2005年05月17日

EUC の正規表現

最近は、ニュース検索に新たな機能を追加しようと試行錯誤しています。

EUC の文字列が文字化けしていないかどうかをチェックする必要がありました。チェック自体は難しくなく、単に EUC の範囲外の文字が含まれているかどうかを調べればよいのです。

EUC の 1byte 文字は、以下のように表現することが出来ます。というか、すべての ASCII 文字 はこれ。

[\x00-\x7F]

しかし、よくよく考えると、この表現には制御文字も含まれているんですよね。なので、このままマッチさせると文字化けを発見することが出来ないわけです。なので、制御文字を除いてマッチさせるのが吉だと思う。

[\x20-\x7E]

ということで、僕は、以下のように定義して文字化けが無いかどうかを調べています。

$euc = '[\x20-\x7E]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE]';
if ($text !~ /^(?:$euc)+$/o) {
    print "化けてるよ!";
}

もっといい方法が無いものだろうか。

2005年05月17日 22:12 | Programming

トラックバック

コメント