- 2007/04/16
- PHP
WEBプログラムを作っていると、たびたび出てくるメールアドレス入力フォーム。そのメールアドレスが正しいかどうか判定する方法。
Perlの場合
if($email =~ /^[^@]+@[^.]+\..+/){
print '正しいかも';
}else{
print '違うかも';
}
本当に簡易バージョン。Perlメモさんのページにあるように、RFCに準拠したメールアドレスの正規表現を作るのは難しいです。どうしても正しいメールアドレスかどうか判定したいという人は、CPANのモジュール Email::ValidかMail::CheckUserを使うほうが吉。
両者ともメールアドレスが実在するかどうか問い合わせてくれるので、判定レベルがぐっと上がる。問い合わせ方法は、Email::Validはメールアドレスのドメインが実在するかの確認。Mail::CheckUserはメールサーバに接続して、そのユーザが存在するか確認する。
PHPの場合
PHPでは、Perlと互換性のある正規表現が使えるので、上記の簡易正規表現判定も使えます。ただ、完全に判定はしなくてもいいが、もう少し厳しく判定したいという人は以下のものがオススメ。
$match = '^[0-9,A-Z,a-z][0-9,a-z,A-Z,_,\.,-]+'
.'@[0-9,A-Z,a-z][0-9,a-z,A-Z,_,\.,-]+\.'
.'(af|al|dz|as|ad|ao|ai|aq|ag|ar|am|aw|ac|au|at|az|bh|bd|bb|by|bj|bm|bt|bo|ba|bw|br|io|bn|bg|bf|bi|kh|cm|ca|cv|cf|td|gg|je|cl|cn|cx|cc|co|km|cg|cd|ck|cr|ci|hr|cu|cy|cz|dk|dj|dm|do|tp|ec|eg|sv|gq|er|ee|et|fk|fo|fj|fi|fr|gf|pf|tf|fx|ga|gm|ge|de|gh|gi|gd|gp|gu|gt|gn|gw|gy|ht|hm|hn|hk|hu|is|in|id|ir|iq|ie|im|il|it|jm|jo|kz|ke|ki|kp|kr|kw|kg|la|lv|lb|ls|lr|ly|li|lt|lu|mo|mk|mg|mw|my|mv|ml|mt|mh|mq|mr|mu|yt|mx|fm|md|mc|mn|ms|ma|mz|mm|na|nr|np|nl|an|nc|nz|ni|ne|ng|nu|nf|mp|no|om|pk|pw|pa|pg|py|pe|ph|pn|pl|pt|pr|qa|re|ro|ru|rw|kn|lc|vc|ws|sm|st|sa|sn|sc|sl|sg|sk|si|sb|so|za|gs|es|lk|sh|pm|sd|sr|sj|sz|se|ch|sy|tw|tj|tz|th|bs|ky|tg|tk|to|tt|tn|tr|tm|tc|tv|ug|ua|ae|uk|us|um|uy|uz|vu|va|ve|vn|vg|vi|wf|eh|ye|yu|zm|zw|com|net|org|gov|edu|int|mil|biz|info|name|pro|jp)$';
if(preg_match("/$match/",$email)){
print '正しいかも';
}else{
print '違うかも';
}
文字の判定を加えて、さらにトップレベルドメインで判定をしている。デメリットとしてはトップレベルドメインが増えたり減ったりしたときに大変。ereg() でも使用できるが、preg_match() の方がじゃっかん高速。もちろんPerlでも使用できる。
JavaScriptの場合
JavaScriptでももちろん正規表現が使える。
mail = document.getElementById("email").value;
if(mail.match(/^[0-9,A-Z,a-z][0-9,a-z,A-Z,_,\.,-]+@[0-9,A-Z,a-z][0-9,a-z,A-Z,_,\.,-]+\.(af|al|dz|as|ad|ao|ai|aq|ag|ar|am|aw|ac|au|at|az|bh|bd|bb|by|bj|bm|bt|bo|ba|bw|br|io|bn|bg|bf|bi|kh|cm|ca|cv|cf|td|gg|je|cl|cn|cx|cc|co|km|cg|cd|ck|cr|ci|hr|cu|cy|cz|dk|dj|dm|do|tp|ec|eg|sv|gq|er|ee|et|fk|fo|fj|fi|fr|gf|pf|tf|fx|ga|gm|ge|de|gh|gi|gd|gp|gu|gt|gn|gw|gy|ht|hm|hn|hk|hu|is|in|id|ir|iq|ie|im|il|it|jm|jo|kz|ke|ki|kp|kr|kw|kg|la|lv|lb|ls|lr|ly|li|lt|lu|mo|mk|mg|mw|my|mv|ml|mt|mh|mq|mr|mu|yt|mx|fm|md|mc|mn|ms|ma|mz|mm|na|nr|np|nl|an|nc|nz|ni|ne|ng|nu|nf|mp|no|om|pk|pw|pa|pg|py|pe|ph|pn|pl|pt|pr|qa|re|ro|ru|rw|kn|lc|vc|ws|sm|st|sa|sn|sc|sl|sg|sk|si|sb|so|za|gs|es|lk|sh|pm|sd|sr|sj|sz|se|ch|sy|tw|tj|tz|th|bs|ky|tg|tk|to|tt|tn|tr|tm|tc|tv|ug|ua|ae|uk|us|um|uy|uz|vu|va|ve|vn|vg|vi|wf|eh|ye|yu|zm|zw|com|net|org|gov|edu|int|mil|biz|info|name|pro|jp)$/i)){
alert("正しいかも");
}else{
alert("違うかも");
}
- Newer: PHPで読み込み中のページにデータを逐次出力する方法
- Older: 1人暮らしでも大丈夫なヘッドフォンアンプを買った