△▲ WebProg 初心者の質問 pert14▲△

このエントリーをはてなブックマークに追加
697nobodyさん
perl初心者です。
掲示板に英文のスパムが大量に投稿されて困っています。
日本語が一文字も含まれない英文のみの投稿はすべて拒否することで解決したいのですが、

if ($article =~ /[a-zA-Z]/) { &reject; }

では日本文に英字が一文字でも入っていれば拒否されてしまいます。
どのように処理すれば良いのか教えていただけないでしょうか。

よろしくお願いします。
698nobodyさん:2006/11/15(水) 22:40:31 ID:???
jcode.pl等でコード系をテストする

699nobodyさん:2006/11/15(水) 22:41:10 ID:???
if ($article !~ /[^ -~¥s¥n]/) { &reject; }
700697:2006/11/15(水) 22:46:36 ID:wZcizqdY
>>699
ありがとうございます!
全然意味わからないんですがちょっと試してみます。
701697:2006/11/15(水) 22:53:26 ID:wZcizqdY
あれ、何かうまくいかない。最初から拒否されてるみたい。
助けてください〜
702nobodyさん:2006/11/15(水) 23:04:54 ID:???
=~ じゃなくて、ちゃんと !~ にした?
703nobodyさん:2006/11/15(水) 23:26:45 ID:???
^[\w!"#$%&'()=~\@`\[\{+*\}\];:<>?_-]+$
でどう?
記号部分は適当に書いたからエラーが出たら適度にエスケープしといて
704697:2006/11/15(水) 23:44:51 ID:wZcizqdY
>>702
ちゃんとしたんですが・・・もしかしたら$articleが空だとrejectされちゃいます?

>>703
if ($article !~ / ^[\w!"#$%&'()=~\@`\[\{+*\}\];:<>?_-]+$ /)
って書けばいいんですか?
英数字と英文でも使う記号以外が含まれていれば真って感じですか?
これも試してみます。

皆さん、本当にありがとうございます。
if ($article !~ /[日本語]/) { &reject; }
とか出来ればいいんですけどね・・・
705nobodyさん:2006/11/15(水) 23:44:53 ID:???
shift-jis限定

=~ /^[\x00-\x7F]$/
706nobodyさん:2006/11/15(水) 23:49:06 ID:wZcizqdY
>>705
短い!
フォームのデコードで、
&jcode'convert(*value,'sjis');
ってやってるみたいなのでこれから試して見ます。
707697:2006/11/16(木) 00:02:55 ID:cqIoZ59I
駄目でした。適当に英文入れたらrejectされませんでした・・・
708nobodyさん:2006/11/16(木) 00:21:03 ID:???
>>704
$articleが空だとrejectされるね。それが嫌なら

if ($article && $article !~ /[^ -~¥s¥n]/) { &reject; }

if ($article =~ /¥S/ && $article !~ /[^ -~¥s¥n]/) { &reject; }

改行コードに¥rが含まれるなら、それも追加で。

ちなみに >>699 は文字コード非依存で
if ($article !~ /[日本語1文字]/) { &reject; }
なコード。
709nobodyさん:2006/11/16(木) 00:50:00 ID:???
あ遺憾 + が抜けとった

=~ /^[\x00-\x7F]+$/

my ($mat, $code) = &jcode'getcode (\$article);
&reject if $code ne 'sjis';
710697:2006/11/16(木) 00:59:49 ID:cqIoZ59I
ありがとうございます!
if ($article && $article !~ /[^ -~\s\n]/) { &reject; }
でうまく行きました。
空でrejectされちゃうと掲示板の閲覧まで拒否られちゃう仕様だったみたいです。
^ -~\s\n が何をやってるかわからないと気持ち悪いので自分で勉強して見ます。

本当にありがとうございました。