
No.2ベストアンサー
- 回答日時:
前の質問で要求した補足の改善をせずにそのまま転記してもただの
マルチポストですよ。
とりあえず、簡単なサンプルを。
my @kinshi = ("アホ","バカ");
my $str = <<"TEXT";
普通の文です。
あいうえお
TEXT
my $str2 = <<"TEXT";
禁止ワードが含まれています。
アホ
TEXT
if(&word_ban($str, \@kinshi)) {
print "\$str: 禁止用語が含まれています。\n";
}
if(&word_ban($str2, \@kinshi)) {
print "\$str2: 禁止用語が含まれています。\n";
}
# 禁止キーワードが入っているかを調べる
sub word_ban {
my $str = shift;
my $word = shift;
# 間に余計な改行やスペースを入れて
# 投稿回避されないように削除しておく
# 全角スペース(SJIS: "\x81\x41")に対応
$str =~ s/(\x0d\x0a|\x0a|\x0d|\n|\s|\x81\x41|\xff)//g;
return map { $str =~ /$_/m } @$word;
}
SJISのスキップする文字にSJISの全角スペースも入れてみましたが
他のエンコードの場合は動作しません。
あと、上記のスキップ部分はテストしていないので実は全部動作しない
可能性も。(^^ゞ
あとは、自分で該当スクリプトにマージしてください。
この回答へのお礼
お礼日時:2008/08/05 11:08
ご丁寧にどうもありがとうございます。
おかげさまで解決しました!(^-^)
間に余計な改行やスペースを入れて投稿回避できないようにする
なんてできると思わなかったので助かりました。
No.3
- 回答日時:
あと、実際の所はどんなに工夫を凝らしても回避策はいくらでもある
ため、絶対に破られるのであまり信用しすぎない方がいいです。
あまり、条件を厳しくしすぎると普通の文まではじいてしまいますし。
No.1
- 回答日時:
この if 文の条件は
・$body が空でない (かつ 0 でない) または
・$name が空でない (かつ 0 でない) または
・$subject に @kinshi の要素数を代入し, それが 0 でないとき
に成り立ちますが, それでいいですか?
普通は... grep でも使うかなぁ?
grep { $name =~ /$_/ } @kinshi
とやると, $name の中に @kinshi の要素のいずれかが含まれていれば非0 になります.
この回答へのお礼
お礼日時:2008/08/05 11:09
どうもありがとうございます!!
grepを使うなんて思いもつきませんでした。
勉強不足すぎると痛感しました。
おかげさまで解決することができました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
perlについての質問
-
テキストファイルで提出とは?
-
逆スラッシュを使わずにメタ文...
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報