• 締切済み

Perl/CGIでのメール記入チェック方法

メールの全角などの記入ミスをチェックする方法なのですが、現在 if($FORM{'mail'} eq ''){&error("戻ってメールアドレスを入力してください。");} if ($FORM{'mail'} =~ /\s|\,/) { &error("メールアドレスの入力が不正です。");} if ($FORM{'mail'} !~ /[\w\.\-\&]+\@[\w\.\-\&]+\.[\w\.\-\&]/) { &error("メールアドレスは半角で正しくご入力ください。");} のように記述しているのですが、この場合 あ@hogehoge.com → 「メールアドレスの入力が不正です。」 しかし、 あ1234@hogehoge.com → エラー表示せず となってしまいます。半角と全角が混在したらチェックできないのです。これを回避する方法はありますか? よろしくお願いします。

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

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.3

#1です ($FORM{'mail'} !~ /^.+\@.+\..+$/) このようにしてみてください。

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.2

/[\w\.\-\&]+\@[\w\.\-\&]+\.[\w\.\-\&]/ これだと、1234が含まれている時点で[\w\.\-\&]+の条件を満たしてしまいます。 よって2バイト文字があってもスルーしてしまいます。 あ@hogehoge.com の場合は「あ」というように2バイト文字しかありません。 そのため[\w\.\-\&]+の条件に一致しないためこの場合は意図した結果になります。 (ところで、&はメールアドレス中には使われることはありません。少なくともRFC的にはダメでしょう。) RFC準拠の完璧なものがいいならば下記の正規表現を使うといいでしょう。 http://www.din.or.jp/~ohzaki/perl.htm#Mail

titikun00
質問者

お礼

なるほど・・・ いろいろネットで私のほうも調べたのですが、 cgiがsjisで書いているのですが、以下のようにいったんeucに変更してチェックするとうまくいったのですがコレに関してもんだいあるのでしょうか? $C_mail=$FORM{'mail'}; &jcode'convert(*C_mail,'euc'); if ($C_mail =~ /[\xA1-\xFE][\xA1-\xFE]/) { &error("メールアドレスは半角で正しくご入力ください。"); }

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

結構適当ですが if (!$FORM{'mail'}) { $err .= "メールアドレスが足りません<br>\n"; } elsif ($FORM{'mail'} !~ /^[a-z]+.+\@.+.+\..+.+$/) { $err .= "メールアドレスの形式が不正です<br>\n"; } たぶんこれでいいと思います。

titikun00
質問者

補足

($FORM{'mail'} !~ /^[a-z]+.+\@.+.+\..+.+$/) の場合 123@hogehoge.comのように半角数字がだめなんです。

関連するQ&A

  • 確認のメールアドレスの比較の方法

    フォームメールなどで、メールアドレスを入力違いを防ぐため、2回入力させ、違う場合はエラーメッセージを表示させたいのですが、どのように 記述すればよいでしょうか? ちなみに今使っているのでは、以下のような形で入力項目をチェックしています。どうぞよろしくお願いします。 if ($namae eq "") { &error("名前が入力されていません");} if ($post eq "") { &error("郵便番号が入力されていません");} if ($pref eq "") { &error("県名が入力されていません");} if ($address eq "") { &error("住所が入力されていません");} if ($phone eq "") { &error("電話番号が入力されていません");} if ($phone!~ /^\d{2,5}-\d{1,4}-\d{4}$/) { &error("電話番号は半角数字でハイフォンで区切って入力して下さい"); } if ($email eq "") { &error("メールアドレスが入力されていません");} if ($email =~ /\s|\,/) { &error("メールアドレスの入力が不正です");} if ($email !~ /\b[-\w.]+@[-\w.]+\.[-\w]+\b/) { &error("メールアドレスは半角で正しくご入力ください");} #if ($email !~ /(.+)\@(.+)\.(.+)/) { &error("メールアドレスの入力が不正です");}

    • ベストアンサー
    • Perl
  • perlで入力チェック

    昨日ここでお世話になって無事プログラムが完成しました。でももう1個だけどうしても分からない事があるので 教えてください。 フォームで半角、全角数字の入力チェックを行おうとして正規表現を使おうと思ったのですが、perlのコードが分かりません。いろんなサイトを見てこれかな?ってのは探したのですが駄目でした。知恵をお貸しくださいませ。 if ($FORM{'kingaku'} ne *ここに入れるのがわかりませんT0T*) { &error("金額を数字で入力してください。"); } たぶん、これで入力チェックのはずですが・・違ったら指摘おねがいします。

    • ベストアンサー
    • CGI
  • 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>

  • フォームにメールアドレスを記入禁止にするには?

    Q&Aフォームにメールアドレスを記入させないためにはどのようにしたら良いでしょうか? 以下がそのフォームの記入内容のチェックです sub faq_form_check { # 書き込み停止状態? if($end_flg){&error("Faq Error !","Q&Aに投稿できない状態です");} $FORM{'faqcom'} =~ s/<br>//g; if(!$FORM{'faqcom'}){&error("Form Error !","コメントが入力されていません");} if($FAQ_MAX*2 < length($FORM{'faqcom'})){&error("Form Error !","コメントが全角$FAQ_MAX文字を超えています$br戻って修正して下さい");} if($no_pass){&error("Login Error !","Q&Aへの投稿はログインが必要です");} } この部分に if(○○○○($FORM{'faqcom'})){&error("Form Error !","メールアドレスは記入できません");} こんな感じでいけるのではと思うのですが○○○部分の記載方法がわかりません お知恵のある方よろしくお願いいたします

    • ベストアンサー
    • CGI
  • Perlでの複数行にわたるコメント

    Perlにおいて複数行コメントを記述するには =for comment コメントを記述 =cut と書けるとのことですが =for commentと=cutの間に 以下のように1行のコメントが記述されていても問題ありませんか? =for comment #名前をチェック if ($FORM{'name'} eq "") { $error .= "「名前」が入力されていません。$br"; } #タイトルをチェック if ($FORM{'title'} eq "") { $error .= "「タイトル」が入力されていません。$br"; } #コメントをチェック if ($FORM{'comment'} eq "") { $error .= "「コメント」が入力されていません。$br"; } =cut

    • ベストアンサー
    • Perl
  • 全角漢字の入力チェック

    Javascriptにて、Formのテキストフィールドの内容を入力チェックしているのですが、「全角漢字」「全角かな」「全角カナ」「半角英数字」 のみを許可して、それ以外の入力文字をいれるとエラーになるような 関数を作りたいのですが、全角記号や半角記号をチェックするには どうしたらよいのでしょうか。

  • phpでメール2重チェック機能をする方法

    現在メールフォームを作成してまして、 どうしてもメールの2重チェックがうまくいかずご質問させていただきました。 (ちなみにphp勉強中で初心者です) 現在php内で入力したものがjsのチェック機能と連動して、 入力エラーを表示させるようにしました。 メールアドレス部分は、 //メールアドレス入力チェック if(document.mailform.mail.value==""){ window.alert('メールアドレスを入力してください'); return false; // 送信を中止 } //メールアドレス入力チェック if(document.mailform.mail_fix.value==""){ window.alert('確認用メールアドレスを入力してください'); return false; // 送信を中止 } // PCメールアドレスチェック if(document.mailform.mail.value != "" ){ if (!document.mailform.mail.value.match(/^[A-Za-z0-9.-]+[\w-]+@[\w\.-]+\.\w{2,}$/)){ window.alert('メールアドレスをご確認ください'); document.mailform.mail.focus(); return false; // 送信を中止 } ここまで作成し、入力エラーまではでるようになりました。 ただ2重チェックがうまくいかず困っています。。。 ifelseというのでやるようなのですが、、、 わからなくなったので是非教えていただけますでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 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>

  • 正規表現を使って入力チェックを行う

    JavaScriptで正規表現を用いて半角英数入力チェックを行いたいのですが、うまくいきません。 ご協力お願いします。 --【1】------------------------------------------------- if((element2.value.match(/^[^0-9a-zA-Z]$/)){  document.FORM01.in_AAA.value="";  return false; } ------------------------------------------------------- 【1】では、半角、全角に関わらず正常に処理が行われます。 --【2】------------------------------------------------- if(!element2.value.match(/^[^0-9a-zA-Z]$/)){   document.FORM01.in_AAA.value="";   return false; } ------------------------------------------------------- 【2】にすると、半角、全角ともエラーとなってしまいます。 どのようにすれば、実装できるのでしょうか。 皆さん、よろしくお願いします。

  • 空欄でも送信可能なフォーム入力項目の設定方法をおし

    メールアドレスの入力欄なのですが、項目に半角英数指定をしています。 こちらを未入力(空欄)の状態で送信しようとするとエラーメッセージが出てしまうのですが、 入力なしでも送信できるように設定できるコードなどがあれば教えていただけないでしょうか。 下記は現在設定している半角英数指定のコードです。 if ($form{'before'} !~ /^[\w\+\.-]+@[\w\+\.-]*[A-Za-z0-9-]{2,23}\.[A-Za-z]{2,4}$/) { &error_check("<B>メールアドレスの形式</B>が間違っています。半角で正しく入力してください。<BR>");next;} よろしくお願いいたします。

    • 締切済み
    • CGI

専門家に質問してみよう