ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

超初心者向けCGI講座コミュの送信データー内の日本語の有無について

  • mixiチェック
  • このエントリーをはてなブックマークに追加
 formで送信した内容に日本語が含まれているかのチェックを行いたくての質問です。

 以下のように記したのですが、$IN{'message'} に日本語のみを入れても「日本語が含まれていない」と表示されてしまいます。

if ( $IN{'message'} !~ /(\x82[\x9F-\xF2])|(\x83[\x40-\x96])/ ) {
print "日本語が含まれていない";
}else{
print "日本語が含まれている";
}

 何が原因か分かりますでしょうか。
 宜しくお願いいたします。

コメント(3)

>>ケンさん

ご無沙汰しておりますm(_ _)m

記載いただいている正規表現はShift-JISの全角ひらがなと
全角カタカナ(だけ)なので、それ以外の文字(漢字や半角
カタカナなど)が含まれていた場合、日本語であっても
「日本語が含まれていない」と判定されることになりますね。

まずは、仮にShift-JISとして判定するのであれば、
正規表現でチェックする前に入力された文字コードが
Shift-JISかどうかを確認し、もしShift-JISでなかった
場合はShift-JISに変換して、その後に漢字等も考慮した
正規表現でチェックすれば宜しいかと思います。

以下のHP辺りも参考になるかと思います。
http://charset.7jp.net/
http://sieg.xeong.com/archives/2005/06/perl.html
日本語のチェックですが「あ〜ん」「ア〜ン」をチェックしていますが
これで良いのですか?

テストしてみたらOKのようでしたが、$IN{'message'} の中身はS-JISですよね?

一度確認してみたら。ついでに僕の漢字チェックルーチンをアップしますね。

#
# CODE CHECK (漢字)
#
sub kanjichk {
local($moji) = $_[0];

while ($moji ne ''){
if ($moji =~ /^[\200-\237]+/){ # 0x80 - 0x9f 漢字
$moji =~ s/^.//;
$moji =~ s/^.//;
return(1);
}
if ($moji =~ /^[\340-\377]+/){ # 0xe0 - 0xff 漢字
$moji =~ s/^.//;
$moji =~ s/^.//;
return(1);
}

$moji =~ s/^.//;
}

return(0);
Keiさん、horusさん、こんにちは。

 アドバイス、ありがとうございます。
 shift_jis・・・すっかり抜けていて、頭の中はeuc-jpでフィックスしていました。毎度ながらお恥ずかしい限りです。

 if ( $IN{'message'} !~ /(\x82[\x9F-\xF2])|(\x83[\x40-\x96])/ ) {
 は、今よりもcgi等が分からない時に、これを記すと日本語をチェックできる、というどこかのサイトで記されていたのをコピペしておいただけで、前者がひらがなで後者がカタカナというのは分かりませんでした。

 教えていただいたURL
http://sieg.xeong.com/archives/2005/06/perl.html
 は、まさに求めていたものです。

 一般的には、ひらがなの含まれない日本語はあり得ないので、このURLで十人分に参照できるので再構築してみます。
 改めてありがとうございました。

 改めて新トピを立てるほどでもなかった内容で済みませんでした。>管理人様

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

超初心者向けCGI講座 更新情報

超初心者向けCGI講座のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。