• ベストアンサー

コンマ(,)を入力を禁止させたい

お世話になります。 フリー配布のCGI(Perl)をちょっと改造しているのですが カンマを禁止したり別の文字に置き換えたりって 方法ありますか? コンマで区切っているタイプのCGIなので、 訪問者さんが本文中にコンマを入力して データがズレまくってしまいます; 禁止ワードにすればいいのかと思って if($in{"name"} ~ /,/ ){ &error('コンマの使用は禁止されています'); } と、入れてみたらエラーになってしまいました; 何か方法ありませんか? よろしくお願いします。

  • Perl
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • ariman_
  • ベストアンサー率45% (27/59)
回答No.3

すみません。No.2で、半角で記述したので、両方とも,で表現されてますね。 $in{"name"} =~ s/,/,/g; 実際には「,」は、全て半角で記述して下さい。

その他の回答 (2)

  • ariman_
  • ベストアンサー率45% (27/59)
回答No.2

JavaScriptの処理だけではなく(無効のブラウザでは意味が無いので)、CGIスクリプト側でも対処した方が良いです。 実態参照に変換してみては。 $in{"name"} =~ s/,/,/g; これ以外にも、ログに書き込まれる、入力フォームのvalue値全てを変換処理した方が良いでしょう。

回答No.1

>コンマで区切っているタイプのCGIなので、 本来CSV形式の場合、文字列中に「,」を使うなら「"」でくくるのが本来の使い方何ですけどね。 それをしてないとなるとソースを自分でいじれるならそれに準じたように書き直すかですね。 手っ取り早いのはhtml側の入力フォームでJavaScriptで入力チェックで「,」を使えないようにするですね。 そうすればPerl側ではとりあえずは処理しなくてもいい(厳密な処理をしたいならPerl側でも必要ですが)

monica_panda
質問者

お礼

ご返答ありがとうございます! あっ…なるほど!確かにJavaScriptだけでも出来ますね(´△`;)ゞ 目からウロコでした!早速やってみます。 助かりました!(^^)

関連するQ&A

  • cgiによる文字入力数の制限について

    perlについては素人な者ですが、私の質問をお願いします。 フリーの掲示板cgiを使っていますが、IDネームを決定する際に入力できる文字数の制限がありません。 「未入力」と「全角」を含む場合は、以下の部分でエラーを出せますが、 if ($in{'name'} eq "" || $in{'name'} =~ /[^a-zA-Z0-9]/) { &error("IDネームを確認してください。");} この箇所に書き加えて、4文字から10文字以内といった文字入力数の制限を加えるにはどうしたらよいのでしょうか? cgiは携帯用なのでJavaScriptは使わない方法で何かあればお願い致します。

    • ベストアンサー
    • CGI
  • 正規表現でカンマを対象にする方法

    フォームから入力された値をCSVにはき出しているため、 「,」(カンマ)を禁止文字としたいのですが、 正規表現で対象にすることは可能でしょうか? 「.」(ピリオド)なら  if($TEST1 =~ /\./) とすればよいと思うのですが、、、  if($TEST1 =~ /\,/) ではダメですよね。 正規表現で引っかけてアラートを出す予定なのですが、 if($TEST1 =~ /\,/){ print <<END; <script> alert(",(カンマ)を含んでいます"); </script> END &error; } 他のやり方で「,」(カンマ)を禁止文字にする方法でも構いません。 また、入力フォームは8つあるのですが($TEST1~$TEST8)、 まとめて「,」(カンマ)を禁止文字にすることはできますか? 開発環境:WindowsXP(TeraTerm使用) サーバー:HP-UX perlバージョン:5.6.1 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 未入力のチェックをするには?

    「とほほのwww入門」さんのwwwmailというメールフォームcgiを使わせてもらっています。 このメールフォームに未入力のチェックをさせたいのですが、どうしてもうまくいきません。 例えば「名前」を入力必須項目にしたいので、未入力だった場合、エラーを表示させたいのです。 他のサイトなどを参考に、 #名前がないときの処理 if ($FORM{'NAME'} eq "") { &err('名前が記入されていません。'); } と入れてみたりしたのですが、Internal Server Error がでてしまいます。 また、現在配布されているものと違ったりするようです。 CGIに関してはあまり詳しくなく、本当に簡単な改造をしたことがある程度です。どなたかご存知の方がいらっしゃいましたらぜひ宜しくお願いいたします!

    • ベストアンサー
    • CGI
  • if文がうまく書けない(T.T)

    某CGIを改造してます。 CGIにIDとPassを組み込もうとしているのですが、うまくできません。 いろいろな認証CGIを真似してやっているのですが… sub pass2{ open (FILE,"$passdata"); @file = <FILE>; close FILE; foreach (@file) { local($nm,$ps)= split(/,/,$_); if ($nm eq $in{'name'} && crypt($in{'password'},$ps) eq "$ps") { &admin; exit; } } &error("認証に失敗しました?"); } この状態だと動くことは動くのですが、ちょっと面倒なので逆転させたいんです。 そこで以下のように作り変えてみました。 if ($nm ne $in{'name'}) { &error("名前が違います"); exit; } if ($nm eq $in{'name'} && crypt($in{'password'},$ps) ne "$ps") { &error("パスワードが違います。"); exit; } } &admin } こうすると、なぜか正しい名前を入れても「名前が違います」のメッセージが出ます。 いったいどこが間違っているのですか? 言語はperlです。 お願いします。

    • ベストアンサー
    • CGI
  • 禁止ワードの設定

    禁止ワードを設定して、その禁止ワードの一つと投稿内容が一致したら 投稿を拒否したくて以下のように記述したところ、 禁止ワードではない言葉でもエラーが表示されてしまいました。 どこか記述が違うのでしょうか? @tokumeikinshi = ("アホ","バカ");#禁止ワードのリスト if((my $body)or(my $name)or(my $subject) = @tokumeikinshi){ &::error(\'禁止ワードが含まれています');{exit;} }

    • 締切済み
    • CGI
  • 禁止ワードに設定できない文字

    CGIROOM で配布されている CGI機能拡張用のプログラム『ワードチェック』 (伝言板などに禁止ワードを設定できる) …を利用しているのですが、 これ↑に"登録することができない単語 (つか、文字)"…って、ありますか?? 例えば「半角カンマは駄目」とか。。。 「半角スペースを入れちゃ駄目」とか。。。 登録する単語の数に制限は無いので、 沢山登録したら、…最近、何を書いても 禁止ワード扱いされ、投稿が出来なく なってしまいました~(^_^;) ■備考■ my $word=<<'WORD'; 馬鹿 死ね! ウンチ WORD ↑こんな風に『my $word=<<'WORD';』 と『WORD』の間に、投稿されたくない単語 を書くようになってます。

    • ベストアンサー
    • CGI
  • CGI掲示板~禁止ワード追加カスタマイズ

    やっとここまでできました。 前回の質問の後に追加できないので、新たに投稿します。 詳しい内容は前回の質問を見て下さい。 なんとか独自で以下のように禁止ワードを設定できましたが、 最高でも18個が限界のようです。あとはエラーが出ます。 これを好きなだけ設定する方法を教えて下さい。 初期設定の中に追加 ↓↓↓ ## 禁止文字 @haijyo = ( ,'殺' ,'死' ,'宣伝' ,'無修正'); 実際の登録処理の中に追加 ↓↓↓ # 禁止処理 foreach $haijyo (@haijyo) { if ($comment =~ /$haijyo/) { &error('コメントに禁止ワードがあるようです'); } } foreach $haijyo (@haijyo) { if ($name =~ /$haijyo/) { &error('名前に禁止ワードがあるようです'); } } foreach $haijyo (@haijyo) { if ($title =~ /$haijyo/) { &error('タイトルに禁止ワードがあるようです'); } } foreach $haijyo (@haijyo) { if ($risou =~ /$haijyo/) { &error('希望する相手に禁止ワードがあるようです'); } } ここまで必死にきました。宜しくお願いします。

    • 締切済み
    • CGI
  • 禁止ワードのすり抜け対策

    現在、以下のようにして禁止ワードを設定しています。 httpという単語を禁止ワードにしているのですが この禁止ワードをすり抜けるために h t t pなどと書き投稿して利用者を悪質な出会い系サイトに誘導しようとする者がおり、困っております。 半角・全角スペースを使って禁止ワードをすり抜けようとする行為をン防止することは可能でしょうか? foreach (@deny) { if (index($FORM{'sender'},$_) >= 0) { &error("入力エラー","禁止ワードが含まれています。"); } if (index($FORM{'from'},$_) >= 0) { &error("入力エラー","禁止ワードが含まれています。"); } if (index($FORM{'sub'},$_) >= 0) { &error("入力エラー","禁止ワードが含まれています。"); } if (index($FORM{'comment'},$_) >= 0) { &error("入力エラー","禁止ワードが含まれています。"); } }

    • ベストアンサー
    • CGI
  • プロキシからの書き込みを禁止したい

    現在 http://minicgi.net/ の「yybbs」というのを使わせていただいているのですが このCGIにはプロキシからの書き込みを禁止することが出来ないみたいで、もしよろしければプロキシからの書き込みを禁止にする改造方法を教えていただければと思いまして…

    • 締切済み
    • CGI
  • Perl 禁止語句

    テキストの中に禁止語句一覧があります。 それと一致した場合、エラーを返すのですが、 現在のコードですと、 完全一致で、これを部分一致にする 方法を教えてください。 またコードの指摘があればよろしくお願いいたします! ◆ngword.txt◆ あい いう うえ えお ・ ・ ・ 1000行ほど(もっとあるかもしれません) ◆test.pl◆「UTF-8」 #/usr/bin/perl use Encode; my $Name = "え"; $Name = encode('cp932', decode('UTF-8', $Name)); open my $fh, '<', 'ngword.txt'; chomp(@ngword = <$fh>); if(&ban($Name, \@ngword)) { print "error\n"; } sub ban { my $body = shift; my $word = shift; $body =~ s/(\x0d\x0a|\x0a|\x0d|\n|\s|\x81\x41|\xff)//g; return map { $body =~ /$_/m } @$word; }

    • ベストアンサー
    • Perl