メールアドレスの書式が正しいかチェックする正規表現
2012-10-18 755 1866メールアドレスの書式チェックの方法をネットで調べると、preg_match関数を使用した正規表現チェックのコードがいくつか出てくるのだが、どれも同じコードではない為、どれが一番正確なのかはよく分からない。そこで、信用できそうなコードをご紹介。
どうやら、docomoは「da.me..@docomo.ne.jp」といったRF2822非準拠の携帯メールアドレスが取得できるらしいので、docomoのせいでちょっとややこしいようだ。
↓ドコモのメールアドレスの取得は以下が可能↓
■ドットで始まる
■ドットが連続する
■@の前がドット
あと、こんなメールアドレスも存在するらしい・・・
■Abc\@def@example.com
■customer/department=shipping@example.com
■!def!xyz%abc@example.com
さまざまな状況があるため、メールアドレスの書式チェックは難しいようです。
↓某サイトではこの簡易的なコードを紹介していたが、これでは使えない様子。
<?php
//あくまで簡易的なチェックだというコード
if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $email)) {
//正しいメールアドレスかもしれません
}else{
//正しくないメールアドレスではないかもしれません
}
?>
↓これは正規表現に自信がある人が上記のコードにケチをつけて、ブログで紹介していた正規表現コード。
/^(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:"(?:\\[^\r\n]|[^\\"])*")))\@(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:\[(?:\\\S|[\x21-\x5a\x5e-\x7e])*\])))$/参考URL:https://blog.livedoor.jp/dankogai/archives/51189905.html
ながっ!!そしてややこしい!!さすがPHPしかできないプログラマーをコケにしているだけある。尊敬です。
そして、次は何回か挫折したけどもう一度チャレンジしてみたという、頑張り屋さんが紹介したコード。
<?php参考URL:https://fdays.blogspot.jp/2007/10/rfc-2822-j0hn-d0e-10-pregmatch-9.html
//DoCoMoの変メールをカバーしたコード
if(preg_match('/^[-+.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]{2,6}$/i', $email)){
//正しいメアド
}else{
//正しくないメアド
}
?>
DoCoMoの変メールもOKとしているのでこれが一番実用的なのか?しかし、これでもカバー率は99%だという…。
ちなみに、外人が書き上げた正規表現の書籍には「メールアドレスは正規表現で表すのは不可能」といった内容のことが書かれているみたい。でもそれは、RF2822非準拠のめちゃくちゃなメアドを作る人が悪いので、そんなメアドを対応する必要はないでしょう。従って、上記で紹介したコードで十分でしょう!