Perlで半角のカタカナ・漢字・平仮名をチェックするには?

[上に] [前に] [次に]
まる [E-Mail] 1999/03/26(金) 13:10:59
現在、ホームページから入力してもらったデータをDBに保存する
CGIプログラムをPerlで作成しています。
入力してもらう日本語データのみを全角に統一し、半角の日本語データを入力した場合は、エラー表示したいのですが、半角日本語データを
検出する方法がありますか?
良い方法があったら教えてください。

通り掛かり 1999/03/27(土) 18:42:04
緊急回避ですよ?
jcode.plを使って、h2zで全角に変換、
元データと比較して違ってたらはじく。

漢字・平仮名まではじきたければ素直に
=~ /[A-Za-z0-9    ]*$
                      ↑
この後考えられる記号を全部列記

jcode.plのh2zって、ちょっと動作があやしいので、
本来変換したい文字列に、日本語文字列をちょこっと
くっつけて変換しないと駄目かな?。

Aurai [E-Mail] 1999/03/28(日) 07:03:54
$str がチェックする文字列
漢字コードはSJISとします

if ((" ".$str) =~ /[^\x81-\xFF][\xA0-\xDF]/) {
  print "半角カタカナ発見";
}

これで大丈夫だと思います

mo [E-Mail] 1999/03/28(日) 17:34:13
> jcode.plのh2zって、ちょっと動作があやしい。

・半角カタカナのみから成り立つ SJIS 文字列は EUC であると誤認式する確率が高い。
・SI/SO (ascii 0x0f/0x0e) の半角カタカナを認識しない。

という不都合があります。

通りがかり 1999/03/28(日) 21:57:58
moさん、jcode.plの不都合の指摘、どうもありがとうございました。
日本語を付加してから変換というのは最初の、半角カタカナに
ひっかかってたんですね。納得。

[上に] [前に] [次に]