• ベストアンサー

メールアドレスかどうかの

正規表現を教えてください @があるので =~/.+@.+/ では荒すぎますか?

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

  • ベストアンサー
  • fu_u_ka_i
  • ベストアンサー率51% (15/29)
回答No.3

#2です。 理解できない正規表現は使わないことです。 長い正規表現式ですが、 $mail="uso@dayo <どうせチェックはいいかげん>"; という入力にマッチします。 というか、マッチさせるために作られた表現式のハズです。 貴殿が求める入力チェックは、"ユーザ@ドメイン"であることを 確認したいのだと思いますが、上記のようにコメントが付随する 入力を認めたいのですか? 入力の妥当性チェックとしては、思い切りいい加減ですし.. ということで、同じレベルのチェックでよければ、 if($_=~/^[\w$\-\_\#\%\.]+\@[\w\-\_\.]+$/) で充分じゃないですかね。

guuman
質問者

お礼

簡単なチェッカありがとうございます

その他の回答 (2)

  • fu_u_ka_i
  • ベストアンサー率51% (15/29)
回答No.2

如何に難しい表現式を使いチェックしようとしても、簡素なチェックですまそうとしても、 所詮は、”正しい”メールアドレスかを判断できるわけではありません。 ”正しい”メールアドレスは、実際にメールを送受信して初めて判ります。 求めるチェックの精度にもよりますが、自分で意味のわからない表現式でチェックするより 簡素であっても、どこまでチェックできているのかを把握できているチェックの方が、 後々に問題が起きにくいと思います。

guuman
質問者

補足

ありがとうございます メールアドレスが存在するかまでの判定は必要なくとりあえずいいかげんな入力をある程度防ぎ自動排除したいのです とりあえずの判断できればいいので if($mail!~=/下の表現/) { ........... } とした使い方をしたいのですが正しいでしょうか?

  • TNY
  • ベストアンサー率42% (69/163)
回答No.1

「Perlメモ」のページに正確な正規表現が載っています。 奥が深いです…

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

補足

ありがとうございます すごいことになっていますね 一応以下のようにしたのですがこれで正しいでしょうか? $mail=~ /(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\ \[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][ ^\\\x80-\xff\n\015"]*)*")(?:\.(?:[^(\040)<>@,;:".\\\[\]\000-\037\x 80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\ xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*"))*@(?:[^(\0 40)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000 -\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\]) (?:\.(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,; :".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x 80-\xff])*\]))*/

関連するQ&A

専門家に質問してみよう