ホームページ  >  記事  >  バックエンド開発  >  PHPチェックメールメール機能(変な書き方)_PHPチュートリアル

PHPチェックメールメール機能(変な書き方)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:39:38927ブラウズ

以前に書いた PHP フォームのメール送信プログラムでは、メール アドレスの形式が正しいかどうかを確認するために次のメソッドが使用されています。

コードは次のとおりです コードをコピーします

eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9_-]+.[a- z0-9_- ]+.*", $email)

後で、user@126,com など、誤って . と書かれたようなメール アドレスも検証に合格する可能性があることがわかりました。確認したところ、実際にはユーザー名の部分のみを検証していることが判明したので、次の例を含むチュートリアルをオンラインで見つけました:

コードは次のとおりです

eregi('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[ a-z0-9 -]+)*$',$email)

確認したところ、メールアドレス user@126,com はまだ認証に合格していることが判明しました。例を見つけました:

コードは次のとおりです

eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z] {2,3} $",$str) www.111cn.net

これはサフィックス名を検証するため、より合理的であるように見えますが、4 文字を超えるトップレベルのドメイン名はわずかに変更するだけで済みます。ただし、電子メール アドレス user@xxx,com 111cn.net は引き続き検証に合格できます。これは、. がエスケープされていないためであることがわかりました。そこで、少し変更しました:

コードは次のとおりです

eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z] {2,4} $)

ユーザー名のチェックが少し緩くなっていますが、今のところはうまく機能しているようです。

例1

次のようにコードをコピーします

function is_valid_email($email, $test_mx = false)
{
if(eregi("^([_a-z0-9-]+)(.[_a-z0- 9 -]+)*@([a-z0-9-]+)(.[a-z0-9-]+)*(.[a-z]{2,4})$", $email))
if ($test_mx)
{
list($username, $domain) = split("@", $email);
return getmxrr($domain, $mxrecords);
}
else
return true;
else
return false ;
}
?>

例2(自分で書いたもの)

次のようにコードをコピーします

function is_valid_email_address($email){
$qtext = '[^//x0d//x22//x5c//x80-//xff]';
$dtext = '[^//x0d] / /x5b-//x5d//x80-//xff]';
$atom = '[^//x00-//x20//x22//x28//x29//x2c//x2e//x3a- / /x3c'.
'//x3e//x40//x5b-//x5d//x7f-//x​​ff]+'
$quoted_pa​​ir = '//x5c[//x00-//x7f]';
$domain_literal = "//x5b($dtext|$quoted_pa​​ir)*//x5d";
$quoted_string = "//x22($qtext|$quoted_pa​​ir)*//x22"; $ sub_domain = "($domain_ref|$domain_literal)";
$word = "($atom|$quoted_string)"
$domain = "$sub_domain(//x2e$sub_domain)*"; word (//x2e$word)*";
$addr_spec = "$local_part//x40$domain";
return preg_match("!^$addr_spec$!", $email) ? 1 : 0;
}


詳細については、http://www.111cn.net/phper/php-cy/57193.htmをご確認ください

http://www.bkjia.com/PHPjc/729848.html

www.bkjia.com

http://www.bkjia.com/PHPjc/729848.html技術記事以前に作成した PHP フォームのメール送信プログラムでは、次のメソッドを使用してメール アドレスの形式が正しいかどうかを確認します。 コードは次のとおりです。 eregi("^[_a-z0-9-]+(.[_a-) z0...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。