PHP でメールアドレスを検証する方法は数多くありますが、正規表現を自分で記述する方法が一般的ですが、私は PHP 独自の検証方法を使用しています。 。
filter_var は、PHP に組み込まれた変数フィルタリング メソッドであり、多くの実用的なフィルタを提供し、整数、浮動小数点数、電子メール アドレス、URL、MAC アドレスなどを検証するために使用できます。
特定のフィルター参照: filters.validate
filter_var が false を返す場合、変数がフィルターを通過できず、不正であることを意味します。
$email = "lastchiliarch@163.com";var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));$email = "asb";var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));$email = "1@a.com";var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));输出:string(21) "lastchiliarch@163.com"bool(false)string(7) "1@a.com"
不正なメール形式 asb の場合は false が返されますが、1@a.com の場合は合格しますが、まだいくつか欠陥があります。
ただし、一般ルールが通過すると、1@a.com は正当なメール アドレスとみなされます。では、それをより正確に確認する方法はあるのでしょうか。
checkdnsrr は、指定されたホストの DNS レコードをクエリするために実際に使用され、メールボックスが存在するかどうかを確認するために使用できます。
1@a.com の場合、MX レコードは間違いなく存在しません。
$email = "lastchiliarch@163.com"; var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX")); $email = "1@a.com"; var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX")); 输出: bool(true) bool(false)
ご覧のとおり、これは完璧です。唯一の欠点は、結局のところ、ネットワーク リクエストであることです。 したがって、この方法を使用して多数のメールボックスを同時に検証するのは適切ではありません。
大部分の不正なメールボックスでは、filter_var と checkdnsrr を組み合わせて検証できます。filter_var は確実に失敗し、残りが使用されます。
さらなる判断のためにcheckdnsrrを実行します。
$email_arr = array("lastchiliarch@163.com", "1@a.com"); foreach($email_arr as $email) { if (filter_var($email) === false) { echo "invalid email: $email \n"; continue; } if(checkdnsrr(array_pop(explode("@",$email)),"MX") === false) { echo "invalid email: $email \n"; continue; } } 输出: invalid email: 1@a.com
ただし、MX レコードをチェックしているだけであるため、163.com が存在すると判断できるだけで、ユーザー lastchiliarch が存在することを意味するわけではないことに注意してください。
メールボックスの存在をより正確に確認したい場合は、SMTP サーバーに接続して確認するしかありません。