• 締切済み

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

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

みんなの回答

  • 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のように半角数字がだめなんです。