電子メール アドレスを検証するための次の関数があります。
function validateEMAIL($EMAIL) {
$v = "/[a-zA-Z0-9_-.+]+@[a-zA-Z0-9-]+.[a-zA-Z]+/";
return (bool)preg_match($v, $EMAIL);
}
メールアドレスが有効かどうかを確認するためにこれでよろしいでしょうか?
ベストアンサー1
メールアドレスが正しい形式かどうかを確認する最も簡単で安全な方法は、filter_var()
関数:
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// invalid emailaddress
}
さらに、ドメインがMX
レコードを定義しているかどうかを確認することもできます。
if (!checkdnsrr($domain, 'MX')) {
// domain is not valid
}
しかし、それでもメールが存在することは保証されません。それを確認する唯一の方法は、確認メールを送信することです。
これで簡単な答えがわかりましたので、興味があれば電子メール アドレスの検証について読み進めてください。興味がない場合は、簡単な答えを使用して先に進んでください。気にしないでください。
正規表現を使用して電子メール アドレスを検証するのは「不可能」な作業です。あなたが作成した正規表現は役に立たないとさえ言えます。電子メール アドレスに関する RFC は 3 つあり、間違った電子メール アドレスを検出し、同時に誤検出が発生しないように正規表現を書くことは、人間には不可能です。このリストPHP の関数で使用される正規表現のテスト (失敗と成功の両方) filter_var()
。
組み込みの PHP 関数、電子メール クライアント、またはサーバーでも正しく動作しません。それでも、ほとんどの場合はこれfilter_var
が最善のオプションです。
PHPが(現在)メールアドレスの検証に使用している正規表現パターンを知りたい場合は、PHPソース。
電子メール アドレスについてさらに詳しく知りたい場合は、まず仕様書を読むことをお勧めしますが、決して読みやすいものではないことを警告しておきます。
- RFC5322 の翻訳
- RFC5321 の翻訳
- RFC3696 の翻訳
- RFC6531 の翻訳(多くのクライアント/サーバーでは受け入れられませんが、Unicode 文字は許可されます)