PHP でメールアドレスを検証する方法はたくさんありますが、最も一般的に使用されるのは 正規表現 ですが、PHP にはメールアドレスを検証できる組み込みメソッドがあります。見てみましょう
私のPHPには検証用のメソッドが付属しています。
filter_var
filter_var は、整数、浮動小数点数、電子メール、URL、MAC アドレスなどをチェックするために使用できる、PHP に組み込まれた変数フィルターメソッドです。 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 は正当なメール アドレスとみなされます。では、それをより正確に確認する方法はあるのでしょうか?
checkdnsrrcheckdnsrr は、指定されたホストの 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+checkdnsrrfilter_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 サーバーに接続して確認するだけです。
は、メール、URL、IP が正当であるかどうかを検証するための PHP 独自のメソッドである
メール検証filter_var 関数を使用します。
構文
filter_var(変数、フィルター、オプション)変数は必須です。フィルタリングする変数を指定します。 フィルターはオプションです。使用するフィルターの ID を指定します。
options は、フラグ/オプションを含む配列を指定します。各フィルターで使用可能なフラグとオプションを確認してください。
例 #1 filter_var() の例
<?php var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)); var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)); ?>
上記のルーチンは出力します:
string(15) "bob@example.com" bool(false)
以上がphp には、電子メール アドレスが存在するかどうかを確認する独自のメソッドがあることをご存知ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。