06/11/15 22:09:40 wZcizqdY
perl初心者です。
掲示板に英文のスパムが大量に投稿されて困っています。
日本語が一文字も含まれない英文のみの投稿はすべて拒否することで解決したいのですが、
if ($article =~ /[a-zA-Z]/) { &reject; }
では日本文に英字が一文字でも入っていれば拒否されてしまいます。
どのように処理すれば良いのか教えていただけないでしょうか。
よろしくお願いします。
698:nobodyさん
06/11/15 22:40:31
jcode.pl等でコード系をテストする
699:nobodyさん
06/11/15 22:41:10
if ($article !~ /[^ -~¥s¥n]/) { &reject; }
700:697
06/11/15 22:46:36 wZcizqdY
>>699
ありがとうございます!
全然意味わからないんですがちょっと試してみます。
701:697
06/11/15 22:53:26 wZcizqdY
あれ、何かうまくいかない。最初から拒否されてるみたい。
助けてください~
702:nobodyさん
06/11/15 23:04:54
=~ じゃなくて、ちゃんと !~ にした?
703:nobodyさん
06/11/15 23:26:45
^[\w!"#$%&'()=~\@`\[\{+*\}\];:<>?_-]+$
でどう?
記号部分は適当に書いたからエラーが出たら適度にエスケープしといて
704:697
06/11/15 23:44:51 wZcizqdY
>>702
ちゃんとしたんですが・・・もしかしたら$articleが空だとrejectされちゃいます?
>>703
if ($article !~ / ^[\w!"#$%&'()=~\@`\[\{+*\}\];:<>?_-]+$ /)
って書けばいいんですか?
英数字と英文でも使う記号以外が含まれていれば真って感じですか?
これも試してみます。
皆さん、本当にありがとうございます。
if ($article !~ /[日本語]/) { &reject; }
とか出来ればいいんですけどね・・・
705:nobodyさん
06/11/15 23:44:53
shift-jis限定
=~ /^[\x00-\x7F]$/
706:nobodyさん
06/11/15 23:49:06 wZcizqdY
>>705
短い!
フォームのデコードで、
&jcode'convert(*value,'sjis');
ってやってるみたいなのでこれから試して見ます。
707:697
06/11/16 00:02:55 cqIoZ59I
駄目でした。適当に英文入れたらrejectされませんでした・・・
708:nobodyさん
06/11/16 00:21:03
>>704
$articleが空だとrejectされるね。それが嫌なら
if ($article && $article !~ /[^ -~¥s¥n]/) { &reject; }
か
if ($article =~ /¥S/ && $article !~ /[^ -~¥s¥n]/) { &reject; }
改行コードに¥rが含まれるなら、それも追加で。
ちなみに >>699 は文字コード非依存で
if ($article !~ /[日本語1文字]/) { &reject; }
なコード。
709:nobodyさん
06/11/16 00:50:00
あ遺憾 + が抜けとった
=~ /^[\x00-\x7F]+$/
my ($mat, $code) = &jcode'getcode (\$article);
&reject if $code ne 'sjis';
710:697
06/11/16 00:59:49 cqIoZ59I
ありがとうございます!
if ($article && $article !~ /[^ -~\s\n]/) { &reject; }
でうまく行きました。
空でrejectされちゃうと掲示板の閲覧まで拒否られちゃう仕様だったみたいです。
^ -~\s\n が何をやってるかわからないと気持ち悪いので自分で勉強して見ます。
本当にありがとうございました。
711:nobodyさん
06/11/16 01:08:38
精子かよw