- ベストアンサー
フォームメールのメールアドレスのエラーチェック
メールアドレスのエラーチェックで、 複数行+@+複数行で、 入力アドレスの中に、@マークの無い場合に エラーが出るようにするには、 どうしたらよいのでしょうか? unless ($email =~ /^[\w-]+@[\w-]/){ $errMsg .= ', e-mail'; $errNum++; $e_email = 1; } この方法ではうまくいかないのですが、 どなたかアドバイスをお願いいたします。
- みんなの回答 (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"; } -------ここまで------- ↑の処理を行う。 ご自分のスクリプトの適当なところにコピーして使えばいいかと。 エラー時の処理は必要に応じて変更してください。
その他の回答 (2)
- nipotan
- ベストアンサー率59% (134/227)
> 文字列@文字列の@マークがないばあい、 > エラーが出るというやりかたはないのでしょうか? 単純にそれだけの条件であった場合は、 > unless ($email =~ /^[\w-]+@[\w-]/){ > $errMsg .= ', e-mail'; $errNum++; $e_email = 1; > } これはコケない (うまくいく) でしょう。 うまくいかなかったのは別の問題ではないでしょうか。 もっと「どううまくいかなかった」かを開示したほうが解決は圧倒的に早いと思います (例えば、"...." この場合はエラーにならなかったとか)が、 例えば、@ 前に [a-zA-Z0-9_-] の文字が一文字以上ある事を許容してますが、ドットがあったらエラーという扱いになります。 そういう事ではないんですか?
お礼
nipotanさん エラーの原因は、@マークの前に-が入るとエラーがでてしまうものでしたが、 何度か確認したところ、入力されたかたの半角、全角の問題でした。 お騒がせしました。 有り難うございました。
- honnyara
- ベストアンサー率75% (3/4)
メールアドレスの正規表現は大変複雑です。 下記URLを参考してみてください。
補足
honnyaraさん ありがとうございます。 教えていただいたページをみたのですが、 すごいことになってますね、正規表現、、。 単純に メールアドレスの入力で、 文字列@文字列の@マークがないばあい、 エラーが出るというやりかたはないのでしょうか?
お礼
honnyaraさん そうですね、この方法で問題なくエラーチェックできれば、 なによりなので試してみます。 ご意見ありがとうございました。