PHPでウェブの世界と繋がろう!
menu
ホーム > PHPサンプル > 正規表現系 > メールアドレスを判別したい

メールアドレスを判別したい

Pocket

正規表現 メールアドレスの判別 「preg_match()」
数値や論理値 = preg_match (パターン文字列, 入力文字列)

パターン文字列は、検索するパターンを表現する文字列です。入力文字列は検索する対象の文字列です。検索に一致すると数値の 1 を返し、一致しなかった場合 0 を返し、エラーが発生した場合は、 論理値 FALSE を返します。

メールアドレスの書式が正しいかどうか判別する正規表現です。
$mail = 'info@tryphp.net';
if(preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/', $mail)){
    list($username,$domain)=split('@',$mail);
    if(!checkdnsrr($domain,'MX')){
        echo "不正なメールアドレス\n";
    }else{
        echo "正しいメールアドレス\n";
    }
}else{
    echo "不正なメールアドレス<br/>\n";
}

結果は

正しいメールアドレス

となります。

厳密にメールアドレスの妥当性をチェックする正規表現を作成すると本1冊分程度になるという話を耳にしたことがあります。
実際のウェブサービスでは、「仮登録 → ユーザーがウェブサイトから確認メール受信 → メールのURLから本登録」という手順を行い、メールが正しいか判断するようにしましょう。

入力項目では正規表現によるフィルタリングでXSS等の悪意ある入力を弾くようにすればよいと思います。

どの程度の厳密さを求めるかは開発者に依存します。

サンプルコード

– サンプル Click Here ! –

<h3>正規表現 メールアドレスの判別</h3>
<?php
//通常版
$sMailaddress = 'info@tryphp.net';
if(preg_match('/^(&#91;a-zA-Z0-9&#93;)+(&#91;a-zA-Z0-9\._-&#93;)*@(&#91;a-zA-Z0-9_-&#93;)+(&#91;a-zA-Z0-9\._-&#93;+)+$/', $sMailaddress)){
    list($username,$domain)=split('@',$sMailaddress);
    if(!checkdnsrr($domain,'MX')){
        echo "不正なメールアドレスです。<br/>\n";
    }else{
        echo "正しいメールアドレスです。<br/>\n";
    }
}else{
    echo "不正なメールアドレスです。<br/>\n";
}
?>

<h3>正規表現 メールアドレスの判別 関数版</h3>
<?php
//関数版
function CheckEmailAddress($sMailaddress) {
    if(preg_match('/^(&#91;a-zA-Z0-9&#93;)+(&#91;a-zA-Z0-9\._-&#93;)*@(&#91;a-zA-Z0-9_-&#93;)+(&#91;a-zA-Z0-9\._-&#93;+)+$/', $sMailaddress)){
        list($username,$domain)=split('@',$sMailaddress);
        if(!checkdnsrr($domain,'MX')){
            return false;
        }
    return true;
    }
return false;
}
//関数実行
$sMailaddress = 'info@tryphp.net';
if(CheckEmailAddress($sMailaddress)){
    echo "正しいメールアドレスです。<br/>\n";
}else{
    echo "不正なメールアドレスです。<br/>\n";
}
?>
実行結果
正規表現 メールアドレスの判別
正しいメールアドレスです。

正規表現 メールアドレスの判別 関数版
正しいメールアドレスです。

– サンプル Click Here ! –

PEAR::Mail_RFC822
※結構弾く

function isValidInetAddress($data, $strict = false){
    $regex = $strict ? '/^([.0-9a-z_+-]+)@(([0-9a-z-]+¥.)+[0-9a-z]{2,})$/i' : '/^([*+!.&#$|¥'¥¥%¥/0-9a-z^_`{}=?‾:-]+)@(([0-9a-z-]+¥.)+[0-9a-z]{2,})$/i';
    if (preg_match($regex, trim($data), $matches)){
        return array($matches[1], $matches[2]);
    } else {
        return false;
    }
}
Ethna
function CheckMailAddress($mailaddress){
    if (preg_match('/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i', $mailaddress)){
        return true;
    }
    return false;
}


タグ(=記事関連ワード)

日付

投稿日:2012年3月3日
最終更新日:2014年02月20日

関連記事

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

http://www.tryphp.net/phpsample-preg-mail/trackback/