• ベストアンサー

フォームメールのメールアドレスのエラーチェック

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

  • izaq
  • お礼率43% (19/44)
  • CGI
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • honnyara
  • ベストアンサー率75% (3/4)
回答No.3

前の投稿で紹介したPerlメモさんの物をそのまま使わせてもらえばいいんでは。 $email にチェックしたい文字列を代入する そして -------ここから------- $mail_regex = q{(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\} . q{\[\]\000-\037\x80-\xff])|"[^\\\\\x80-\xff\n\015"]*(?:\\\\[^\x80-\xff][} . q{^\\\\\x80-\xff\n\015"]*)*")(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x} . q{80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|"[^\\\\\x80-} . q{\xff\n\015"]*(?:\\\\[^\x80-\xff][^\\\\\x80-\xff\n\015"]*)*"))*@(?:[^(} . q{\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\0} . q{00-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[^\x80-\xff])*} . q{\])(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,} . q{;:".\\\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[} . q{^\x80-\xff])*\]))*}; # $email が正しいメールアドレス(addr_spec)か判定する if ($email !~ /^$mail_regex$/o) { #エラーの場合の処理 print "不正なメールアドレスです\n"; } -------ここまで------- ↑の処理を行う。 ご自分のスクリプトの適当なところにコピーして使えばいいかと。 エラー時の処理は必要に応じて変更してください。

izaq
質問者

お礼

honnyaraさん そうですね、この方法で問題なくエラーチェックできれば、 なによりなので試してみます。 ご意見ありがとうございました。

その他の回答 (2)

  • nipotan
  • ベストアンサー率59% (134/227)
回答No.2

> 文字列@文字列の@マークがないばあい、 > エラーが出るというやりかたはないのでしょうか? 単純にそれだけの条件であった場合は、 > unless ($email =~ /^[\w-]+@[\w-]/){ > $errMsg .= ', e-mail'; $errNum++; $e_email = 1; > } これはコケない (うまくいく) でしょう。 うまくいかなかったのは別の問題ではないでしょうか。 もっと「どううまくいかなかった」かを開示したほうが解決は圧倒的に早いと思います (例えば、"...." この場合はエラーにならなかったとか)が、 例えば、@ 前に [a-zA-Z0-9_-] の文字が一文字以上ある事を許容してますが、ドットがあったらエラーという扱いになります。 そういう事ではないんですか?

izaq
質問者

お礼

nipotanさん エラーの原因は、@マークの前に-が入るとエラーがでてしまうものでしたが、 何度か確認したところ、入力されたかたの半角、全角の問題でした。 お騒がせしました。 有り難うございました。

  • honnyara
  • ベストアンサー率75% (3/4)
回答No.1

メールアドレスの正規表現は大変複雑です。 下記URLを参考してみてください。

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm#Mail
izaq
質問者

補足

honnyaraさん ありがとうございます。 教えていただいたページをみたのですが、 すごいことになってますね、正規表現、、。 単純に メールアドレスの入力で、 文字列@文字列の@マークがないばあい、 エラーが出るというやりかたはないのでしょうか?

関連するQ&A

  • メール入力→(確認)メール入力でのチェック

    よくフォームメールなどの、 メールアドレスを入力するところで、 もうひとつ同じアドレスを入力して、 内容が違っていないかエラーチェックを するものがありますよね。 例えば最初に入力したデータを$emailとしまして、 確認の入力データを $email1としたばあい、 比較して同じデータならエラーをださない。 違うもののばあいエラーをだすというのは、 どうすれば良いのでしょうか?? if ($email1 !=~ /$email/){ $errMsg .= ', e-mail(確認)'; $errNum++; $e_email1 = 1; } return $errNum; } いろいろ考えてみましたが、うまくいかないのです。 どなたかご教授お願いいたします。

    • ベストアンサー
    • CGI
  • 入力フォームをCGIでエラーチェック→PHPにデータを送る

    CGIでフォームの入力をチェックした後、データをphp に送ろうと思います。 今まで使用してた、エラーチェックした後、データを、管理者にメールでデータを送信させるCGIをカスタマイズして、エラーチェックの後に、PHPへデータを送ることは可能なのでしょうか? どなたか御教授お願いいたします。 以下はエラーチェック後の部分です。 $errNum = chkFormInput(); fixTags(); open HTML, $template or err("$templateが開けません"); @html = <HTML>; close HTML; if ($errNum > 0){ # エラーメッセージの先頭のカンマをはずす $errMsg =~ s/^,//; $errMsg = "<font color=\"red\">$errMsg (計$errNumヶ所)"; $errMsg .= "に未入力、又は不適当な入力があります。<br></font>\n"; }elsif (sendmail() && stockData()){ $errMsg = "ありがとうございました。以下の内容で$adminName($adminMail)に送信しました。"; } replaceTags(); showHTML(); exit();

    • 締切済み
    • CGI
  • フォームのエラーチェック

    aのフォームがhogeで、bに記入されていない場合、 bのフォームを再表示させようと思うのですが、 エラーチェック自体スルーしてしまいます。 どこの部分に問題があるのでしょうか? どなたか御教授お願いいたします。 sub chkFormInput { my $errNum = 0; if ($a eq 'hoge' & $b eq ''){ $errMsg .= ', bの項目'; $errNum++; $e_b = 1; } return 1; }

    • ベストアンサー
    • Perl
  • Javascriptで必須項目とメールアドレスチェックを同時に行いたいのですが…

    Javascriptで入力フォームの必須項目とメールアドレスのチェックを行いたいため、下記の様に設定したのですが、メールアドレスが入っているか確認後、メールアドレスのチェックを行うにはどのように書けばいいでしょうか?(現在は、Emailは必ず入力して下さい。Emailアドレスをご確認下さい。のalertが同時にでてしまいます。)宜しくお願いします。 <script type="text/javascript"> <!-- function FormCheck(Form) { Error = new Array(); i = 0; // 選択リストのチェック if ((Form["naiyou"]) && (Form["naiyou"][0].selected == true)) { Error[i] = "お問合せ内容を選択して下さい。"; i++; } // 名前の入力チェック if ((Form["name"]) && (Form["name"].value == "")) { Error[i] = "お名前は必ず入力して下さい。"; i++; } // emailの入力チェック if ((Form["email"]) && (Form["email"].value == "")){ Error[i] = "Emailは必ず入力して下さい。"; i++; } if ((Form["email"]) && (!Form["email"].value.match(/^[A-Za-z0-9]+[\w-]+@[\w\.-]+\.\w{2,}$/))){ Error[i] = "Emailアドレスをご確認下さい。"; i++; } // 未入力があればアラート if (Error.length > 0) { ErrorText = Error.join("\n"); alert (ErrorText); return false; } } // --> </script>

  • 入力フォームに全角・半角スペースがある場合

    入力フォームに全角・半角スペースがある場合に、 データを受け取ったCGIのほうで、エラーメッセージを出そうとおもうのですが、 if ($name_l eq ' ' or $name_l eq ' '){ $errMsg .= ',Name'; $errNum++; $e_name_l = 1; } 上記のやり方だと、複数フォームにスペースが入力された時に、エラーの指事がでないのです。 どなたかご教授お願いいたします。

    • ベストアンサー
    • CGI
  • フォームメールの入力チェック

    HTML側にJavaScriptでチェックを行うのではなく、 nameの値の前にアンダーバーを付けて、cgi側で入力チェックをいたいと思っています。 <input type="text" name="_email">としておけば、 メールアドレスが入力されていなければエラーになります。 これをselect の場合<select name="_time">としてもチェックがかからないのは何故でしょうか? もちろん、option value のdefaultはblankにしてあります。ここで、いづれかのoption value を選ばないと 入力チェックがかかるようにしたいのです。 初歩的な質問で申し訳ありませんが、よろしくお願い致します。

    • ベストアンサー
    • HTML
  • メールアドレス入力チェック

    毎回初心者な質問で申し訳ないです。 Strutsを使ってフォーム作成中なのですが、Validatorではなくjavaの中でエラーチェックをしています。 入力の有無でのエラーチェックはできたのですが、メールアドレスチェックができません。 自分としては 「1文字以上の半角英数記号」@「1文字以上の半角英数記号」 じゃなかったらエラーを返すようにしたいと思い以下のように記述しました。 if (mail != "[\\d[a-zA-Z]*]+@[\\d[a-zA-Z]*]"){ errors.add("mail", new ActionMessage("errors.mail")); } 動かしてみると何を入力してもエラーがかえるようになってしまいました。 正しい記述をご存知の方、ご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • Java
  • JavaScript でメールアドレスのチェックをするには・・・?

    入力フォームで正しいメールアドレスが入力されたのかを確認するため、以下のようなJavaScriptを記述しましたが、動作しません。 関数FormCheckは動作するのですが、関数Checkは動作しません。 現状では、メールアドレスを入力する欄に「www」とだけ入力しても チェックされないので、その他の入力項目がきちんと入力できていれば メール送信されてしまいます。 どのようにすればこのCheck関数が動作するのかどなたか教えていただけないでしょうか?よろしくお願いします。 --------------------Java Script 部分--------------------------- <script language="JavaScript"> <!-- //必須項目のチェック function FormCheck(Form) { Error = new Array(); i = 0; // 氏名の入力チェック if ((Form["name"]) && (Form["name"].value == "")) { Error[i] = "氏名は必須項目です。"; i++; } // メールアドレスの入力チェック if ((Form["email"]) && (Form["email"].value == "")) { Error[i] = "メールアドレスは必須項目です。"; i++; } // 質問したい支店の選択チェック if ((Form["address"]) && (Form["address"][0].selected == true)) { Error[i] = "質問したい支店は必須項目です。"; i++; } // 未入力があればアラート if (Error.length > 0) { ErrorText = Error.join("\n"); alert ("未入力項目があるので送信できません。\n\n"+ErrorText); return false; } } // --> <!-- //メールアドレスチェック var mail; function Check(){ mail = document.myform.email1.value; if(!mail.match(/.*@.*\..*/i)){ alert("メールアドレスが不正です。"); } } // --> </script> --------------------HTML 部分----------------------------------- <body> <table width="419" height="453"> <tr> <td width="732"> <form action="./cgi/test/sendmail.cgi" name="myform" method="POST" target="_self" onSubmit="return FormCheck(this);Check()"> <table width="481"> <!--氏名を入力 --> <tr> <td><strong>氏名</strong></td> <td><input type="text" name="name" size="30" maxlength="50"></td> </tr> <!--メールアドレスを入力 --> <tr> <td><strong>メールアドレス</strong></td> <td><input type="text" name="email" size="50" maxlength="60"></td> </tr> <!--支店選択 --> <tr> <td><strong>質問したい支店</strong></td> <td> <select name="address"> <option value="" selected></option> <option value="aaa@hoemail.com">A支店</option> <option value="bbb@hoemail.com">B支店</option> <option value="ccc@hoemail.com">C支店</option> </select> </td> </tr> </table> <!--送信・キャンセルボタン --> <center> <table> <tr> <td><input type="submit" name="submit" value="送 信"></td> <td><input type="reset" name="reset" value="キャンセル"></td> </tr> </table> </center> </form> </td> </tr> </table>

  • フォームのチェック

    こんにちは、フォームのチェックについて質問です。 ジャバスクリプトで、電話番号は(xxx)xxx-xxxxという形で、メールアドレスはxxx@xxxxx.xx か xxxx@xxxx.xxxという形で入力しなければアラーとが出るように設定したいのですが、どうしたらよいでしょうか?電話番号の方は数字と()が1番目と5番目、-が9番目に来るよう。メールアドレスは、@からは始まらない、@のあとでは、.があるが、.は後ろから2番目または3番目じゃなくてはいけない、というように設定したいのです。ちょっと説明がややこしくなりましたが、お願いします!!

  • メールアドレスが正しいかどうかチェックする方法は?

    フォームから受け取ったメールアドレスが、正しいかどうかをチェックする方法について教えてください。 フォームから受け取ったアドレスが****@vodafone.ne.jpと誤記入されていたため、このアドレス宛にsendmailで送信しようとしたらエラー(Internal Server Error)になりました。(正しくは****@x.vodafone.ne.jp) 「存在しないメールアドレス」の場合は、送信後にuser unknownかhost unknownとしてUndeliveredになりますが、上記の場合、送信そのものができなかったようです。 aaaaaaaa@bbb.******.ne.jp、 aaaaaaaa@******.ne.jp で試してみたところ、同様にエラーになり、 aaaaaaaa@***.ne.jp では送信できました(当然Undeliveredになりましたが)。 「sendmailで送信するときにエラーになるパターン」というようなものがあるのでしょうか? エラーになる前に、メールアドレスが、正しくないという警告を出したいのですが、可能でしょうか? 現在は、メールアドレスに「半角英数と@以外が含まれている」か「@が含まれていない」と警告するようにしています。

    • ベストアンサー
    • CGI

専門家に質問してみよう