• ベストアンサー

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

フォームメールなどで、メールアドレスを入力違いを防ぐため、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("メールアドレスの入力が不正です");}

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

  • ベストアンサー
  • 2NN
  • ベストアンサー率40% (143/353)
回答No.1

再入力のメールアドレスを$re_email などに格納させます。 if($email ne $re_email){ &error("再入力されたメールアドレスが一致しません"); }

yufu99
質問者

お礼

ありがとうございます。試してみます

その他の回答 (1)

  • taseki
  • ベストアンサー率66% (155/233)
回答No.2

> 2回入力させ、違う場合はエラーメッセージを という部分は単に1回目と2回目を比較するだけですが、 入力されたメールアドレスが正しい形式かどうか調べるには?、ということですよね。 そのソースを見ると、カンマやスペース、2バイト文字が入っていたり、@より右にドットが一つも入っていない(これはコメントアウトされている)ものをエラーと判断していますが、厳密に判断できていないと思います。 どこまで厳密にチェックするかは別にして、perl でメールアドレスの正しい形式を判断するには、以下のページが参考になると思います。 http://www.din.or.jp/~ohzaki/perl.htm#Mail これにしたがってチェックすると、以下の関数を1つ用意しておけば、 if (!&mail_ok($email)) { &error("メールアドレスが正しくありません。");} というように書けます。 -------------------------------- sub mail_ok { my $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])*\]))*}; if ($_[0] =~ /^$mail_regex$/o) { return 1; } else { return; } } --------------------------------

yufu99
質問者

お礼

ありがとうございます。試してみます