メアドチェックの正規表現

メールアドレスの入力チェックに正規表現使おうと思って、どこかに転がってるだろって思って調べたら、どうやらメアドの妥当性を正しく判定するための正規表現はないらしい。 え?マジで?

メールアドレスに一致する正規表現

メールアドレスに一致する正規表現は「ありません」。
(中略)
「コメントがネストしない」という条件でなら、メールアドレスに一致する正規表現はあるにはあります。それは以下です。
として紹介されている正規表現の長いこと。。

で、メアドの入力チェック程度ならそんなに厳格にエラーチェックしなくても問題ないので、Mail_RFC822::isValidInetAddress()でチェックすることが可能です。
この関数の実装は以下のようになっています。

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;
    }
}

ネット上でもメアドチェック正規表現論争は何年も前から物議を呼んでいるっぽいので、とりあえず出来合いの関数使っとけってことですかね。はい。