- ベストアンサー
メールアドレスかどうかの
正規表現を教えてください @があるので =~/.+@.+/ では荒すぎますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 理解できない正規表現は使わないことです。 長い正規表現式ですが、 $mail="uso@dayo <どうせチェックはいいかげん>"; という入力にマッチします。 というか、マッチさせるために作られた表現式のハズです。 貴殿が求める入力チェックは、"ユーザ@ドメイン"であることを 確認したいのだと思いますが、上記のようにコメントが付随する 入力を認めたいのですか? 入力の妥当性チェックとしては、思い切りいい加減ですし.. ということで、同じレベルのチェックでよければ、 if($_=~/^[\w$\-\_\#\%\.]+\@[\w\-\_\.]+$/) で充分じゃないですかね。
その他の回答 (2)
- fu_u_ka_i
- ベストアンサー率51% (15/29)
如何に難しい表現式を使いチェックしようとしても、簡素なチェックですまそうとしても、 所詮は、”正しい”メールアドレスかを判断できるわけではありません。 ”正しい”メールアドレスは、実際にメールを送受信して初めて判ります。 求めるチェックの精度にもよりますが、自分で意味のわからない表現式でチェックするより 簡素であっても、どこまでチェックできているのかを把握できているチェックの方が、 後々に問題が起きにくいと思います。
補足
ありがとうございます メールアドレスが存在するかまでの判定は必要なくとりあえずいいかげんな入力をある程度防ぎ自動排除したいのです とりあえずの判断できればいいので if($mail!~=/下の表現/) { ........... } とした使い方をしたいのですが正しいでしょうか?
- TNY
- ベストアンサー率42% (69/163)
「Perlメモ」のページに正確な正規表現が載っています。 奥が深いです…
補足
ありがとうございます すごいことになっていますね 一応以下のようにしたのですがこれで正しいでしょうか? $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])*\]))*/
お礼
簡単なチェッカありがとうございます