ホームページ  >  記事  >  php教程  >  PHP はメールアドレスが存在するかどうかを正確にチェックします

PHP はメールアドレスが存在するかどうかを正確にチェックします

大家讲道理
大家讲道理オリジナル
2016-11-08 14:02:241385ブラウズ

背景

PHP でメールアドレスを検証する方法は数多くありますが、正規表現を自分で記述する方法が一般的です。ただし、PHP には独自の検証方法があります。

filter_var

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

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 を組み合わせて検証できます。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;
        }
    }

出力: 無効なメールアドレス: 1@a.com

ただし、MX レコードをチェックするだけなので、163.com が存在すると判断することしかできないことに注意してください。 lastchiliarch について説明します このユーザーは存在します。

メールボックスの存在をより正確に確認したい場合は、SMTP サーバーに接続して確認するだけです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。