CGIでメールアドレスをチェックするサブルーチンの意味は?

このQ&Aのポイント
  • CGIで実装されたこのサブルーチンは、メールアドレスの形式をチェックするものです。
  • メールアドレスが正しくない場合、エラーメッセージを出力します。
  • 特に、メールアドレスにカンマが含まれている場合にもエラーメッセージを出力します。
回答を見る
  • ベストアンサー

CGIでこのサブルーチンはどうゆう意味があるのでしょうか??

タイトルどうりなのですが、CGIでこのサブルーチンはどうゆう意味があるのでしょうか?? メールアドレスがおかしかったら警告するような感じはなんとなく分かるのですが、実際にアドレスがどうだったら発動(?)するのでしょうか?? どうかよろしくお願いします。 sub MailAddressCheck { my($email) = @_; unless($email=~/^\w[\w\-\.]*\@\w[\w\-\.]+[a-zA-Z]{2}$/) { &ErrorPrint("メールアドレスが正しくありません。"); } if($email =~ /,/) { &ErrorPrint("メールアドレスが正しくありません。"); } }

  • CGI
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.1

Perl の正規表現において、「\w」とは「アルファベット、数字、アンダーバー」 のいずれかである文字であると定義されています。 つまり [A-Za-z0-9_] と同じです。 # 「\w」は「単語(word)構成文字」の略です。 だから、手っ取り早くこのエラーが見たいのなら、 メールアドレスの先頭をこれ以外の文字にすればいいのです。 「.」で始めてみるとか。また、最後が数字で終わることも許されませんので、 わざと数字にしてみるのもいいでしょう。 もちろん、「@」がなければこれもエラーです。

参考URL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_k08.htm,http://www2.famille.ne.jp/~akio1998/l_grep.html
yuichi777rf
質問者

お礼

ありがとうございます。とてもよく分かりました。 助かりました。サイトも参考になってよかったです。 本当にありがとうございました!!

関連するQ&A

  • このサブルーチン間違っておりませんか?

    以下のサブルーチンを記述したらエラーになります。 どこか間違っておるのでしょうか? 宜しくお願いします。 #------------------------------------------------- sub head { print <<"EOM"; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>メールフォーム</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> EOM } #-------------------------------------------------

  • リファレンスをサブルーチンの戻り値にしてもOKですか?

    ■ サブルーチン内部で処理した結果を格納した、配列、ハッシュ、スカラーなどのデータを戻り値として利用する必要があります。その場合、どうするのが標準的なやり方でしょうか? ■ return (配列へのリファレンス, ハッシュへのリファレンス, スカラー); などとやってしまっても問題はないでしょうか? ■ 下のプログラムを試したところ、予想に反しちゃんと 「31415」と表示されました。 #!/usr/bin/perl -w sub subroutine{ my @a = (3, 1, 4, 1, 5); return \@a; } my $b = subroutine{}; print @$b; ■ サブルーチン内部で使用した変数へのリファレンスをサブルーチン 外で使っていいのだろうか? サブルーチンの処理が終了した時点でサブルーチン内部で使用した 変数はメモリーから消去されるのかと思ったものですから。

    • ベストアンサー
    • Perl
  • フォームメールのメールアドレスのエラーチェック

    メールアドレスのエラーチェックで、 複数行+@+複数行で、 入力アドレスの中に、@マークの無い場合に エラーが出るようにするには、 どうしたらよいのでしょうか? unless ($email =~ /^[\w-]+@[\w-]/){ $errMsg .= ', e-mail'; $errNum++; $e_email = 1; } この方法ではうまくいかないのですが、 どなたかアドバイスをお願いいたします。

    • ベストアンサー
    • CGI
  • CGI Perlでの認証について

    CGIにてログイン認証の処理を使用してみたく勉強がてら Perlにて作成しているのですが、どうもうまくいかない ので質問させてもらいます。 ID・パスワード保存用ファイルfile.datにあらかじめ 100<>p34z7 500<>332bdz といった感じで入力してまして、 ログインボタンを押したときに &login_chk($post{'id'},$post{'pwd'}); (URIデコード処理して$post{'id'},$post{'pwd'}を取得します) を実行して下記サブルーチンを呼び出します。 sub login_chk { my ($in_id, $in_pass) = @_; my ($id, $pass); my $data; if (!open (IN, "./file.dat")) { &Error("ファイルが開けません"); } while ($data = <IN>) { ($id, $pass) = split(/<>/, $data); if ($in_id eq $id){ last; } } close(IN); unless ($in_pass eq $pass) { &Error("正しいID・パスワードを入力してください"); } } ※現状ファイルロックの処理はしてません。  パスワードの暗号化もしてません。 で、IDに100、パスワードにp34z7と入力してログインしようとするのですが 「正しいID・パスワードを入力してください」とエラーが出てきます。 当然500のときも同じくエラーでした。 どこが問題なのでしょうか?昨日から考えてずっとわからないのでご回答よろしくお願いします。

    • ベストアンサー
    • Perl
  • サブルーチンと繰り返し処理を使いたい

    今、フォームメールを作っています。 環境はFC3&perl5になります。 複数のチェックボックスがあって、それぞれのチェックボックスの値は「数百文字」のテキストが入っています。 半角72文字で折り返してメールを投げたいので、 fold.plを用いたいのですが、それをサブルーチン化し、かつ数多くのチェックボックスをサブルーチンで改行処理を加えたものをいれたいです。 流れはなんとなくわかるのですが、 変数がどのように記述すればいいかわかりません。 ご教示ください、よろしくお願い致します。 -------------------- require "fold.pl"; require "cgi-lib.pl"; require "jcode.pl"; $q1 = $in{"q1"}; #変数を格納して $q2 = $in{"q2"}; <略> $q35 = $in{"q35"}; while ( ??? < 36) { #35回繰り返し &fold(???); } #流し込みテキストを改行する------------ sub fold{ while (length(@_)) { (my $folded, @_) = fold(@_, 72); $str_fold .= $folded . "\n"; } return $str_fold; $message = <<END_OF_MESSAGE; #メール送信処理 <ヘッダ群(省略)> $q1 $q2 $q3 ... $q35 END_OF_MESSAGE &jcode'convert(*message,'jis'); #j-code.plでメール用に変換 open(MAIL,"|$sendmail -t"); print MAIL $message; close(MAIL);

    • ベストアンサー
    • Perl
  • 特定のactionでのみvalidation

    rails2、mySQLです。 モデルにバリデーションを書くのは知っているのですが 特定のコントローラのメソッドでのみバリデーションしたいとき どうすればよいのでしょう。 Userモデルに書いた場合 class User < ActiveRecord::Base  validates_format_of :email_address, :with => /[a-zA-Z0-9_-]+\@[a-zA-Z0-9_-]+\.\w+/, :allow_blank => true, :message => "有効なEメールアドレスではないようです。"  validates_uniqueness_of :email_address, :allow_blank => true, :allow_nil => true, :message => "このアドレスは既に使用されています。" end class UserController < ApplicationController  def email_conf   self.index    u = User.find :first, :conditions=>["user_name = ?",@user_name ]   unless u    u = User.new(:user_name => @user_name)   end   u["email_address"] = params[:email_address]   if u.valid?    u.save    render :text => '<div>thank you!</div>'   else    render :text => "#{u.errors[:email_address]}"   end  end end これだとほかのアクションの場合もバリデーションを行えばこのパターンのみになりますよね。 userコントローラの email_conf でデータ登録するときのみ、このバリデーションをしたいのですが。。

    • ベストアンサー
    • Ruby
  • CGIを使ったメールフォーム

    CGIを使ってメールフォームを作成できたのですが、確認画面で日本語表記にすることはできるのでしょうか? わたしが設定したのは、 名前とメールアドレスは必須項目としてそれぞれの名前を、「name="_name"」「name="_email"」としました。 そうすると、次の確認画面で「name」「email」とでます。これはもちろんそうなるのですが、「お名前」「メールアドレス」と日本語表示させたいのですが方法がわかりません。どなたか教えてください。

    • ベストアンサー
    • CGI
  • 正規表現でE-mailアドレス形式チェックの仕方を教えてください!

    C++でRegex::Ismatchメソッドを使いメールアドレス形式であるかのチェックをしたいのですが、 どうもうまくいきません。。 MSDNにVB用とC#用のサンプルはあったのですが、正規表現をC++用に変換できずに困っています。 ★VB Regex.IsMatch(strIn, ("^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$") ★C# Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); どなたか分かる方ご教授ください。 よろしくお願いします。

  • 【HP制作】メールフォームの設定について

    http://liquidgem.birondesign.com/から無料テンプレートを落とし、 これをもとにカスタムしようとしているのですが、メールフォームの設定がうまくいきません。。 下部のソースは【submitemail.php】のものです。 $mailto = "your email goes here";の「your email goes here」を自分のメールアドレスに置き換える以外、何か必要な作業はありますでしょうか? 知識がないためテンプレートに頼ろうとしているのですが、うまくいかず困っております。 どなたかご教授頂ければ幸いです。宜しくお願い致します。 <? /************************ * Variables you can change *************************/ $mailto = "your email goes here"; /*PUT YOUR EMAIL IN HERE*/ $cc = ""; $bcc = ""; $subject = "enquiry"; $vname = "Website Contact Form"; /************************ * do not modify anything below unless you know PHP/HTML/XHTML *************************/ $email = $_POST['email']; function validateEmail($email) { if(eregi('^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2,3})?(\.[a-zA-Z]{2,3})?$', $email)) return true; else return false; } if(strlen($_POST['name']) < 1 || strlen($_POST['message']) < 1 || validateEmail($email) == FALSE) { if(empty($_POST['name'])) { $emailerror .= '<li>Enter name</li>'; } if(validateEmail($email) == FALSE) { $emailerror .= '<li>Enter valid email</li>'; } if(empty($_POST['message'])) { $emailerror .= '<li>Enter message</li>'; } } else { $emailerror .= "Your email has been sent successfully"; // NOW SEND THE ENQUIRY $timestamp = date("F j, Y, g:ia"); $messageproper ="\n\n" . "Name: " . ucwords($_POST['name']) . "\n" . "Email: " . ucwords($email) . "\n" . "Comments: " . $_POST['message'] . "\n" . "\n\n" ; $messageproper = trim(stripslashes($messageproper)); mail($mailto, $subject, $messageproper, "From: \"$vname\" <".$_POST['e_mail'].">\nReply-To: \"".ucwords($_POST['first_name'])."\" <".$_POST['e_mail'].">\nX-Mailer: PHP/" . phpversion() ); } ?> <div id='emailerror'> <ul> <? echo $emailerror; ?> </ul> </div>

  • メールアドレスの正規表現

    メールアドレスの正規表現 正規表現の勉強をしています。下記のURLのメールアドレスの正規表現の一部が理解できません。 http://hodade.adam.ne.jp/seiki/page.php?s_mail ^[a-zA-Z0-9!$&*.=^`|~#%'+\/?_{}-]+@([a-zA-Z0-9_-]+\.)+[a-zA-Z]{2,4}$ この中の「[a-zA-Z]{2,4}$」の部分がわかりません。 行末が英文字2以上4以下というのは何を表しているのでしょうか? なぜ2以上4以下になるかが理解できません・・・ 宜しくお願いします!!

専門家に質問してみよう