2016-11-27 21 views
0

メールアドレスのフィルタリングに関する私の2番目の質問ですが、私は実際には編集的です。PHPの電子メールアドレス検証(filter_var以外)

例:

$i = "[email protected][1.1.1.1]"; 
if (!filter_var($i, FILTER_VALIDATE_EMAIL)) { 
$msg = "Invalid email address"; 
} else { echo "valid email!"; } 

このエコー "有効なメール!"、あなたは不思議に思った場合。

解決策はありますか?私は人々が従来の電子メールアドレス([email protected])を使用して登録することができるようにしたい。複雑な正規表現ですか?図書館?私は解決策を見つけることができないようです。

もう一度おねがいします。

答えて

1

有効なメールアドレスです。だから...私は問題を見ない。しかし、あなたは、この(許可されたあなたはそれを少し短くすることができますので、これは、1つの関数にフィルタ - すべてのメソッドを利用)のような何かを行うことができます。

function filtervariable($string,$type,$method) { 
    //function for sanitizing variables using PHPs built-in filter methods 
    $validEmail = false; 

    if ($method == 'sanitize') { 
     $filtermethod = 'FILTER_SANITIZE_'; 
    } elseif ($method == 'validate') { 
     $filtermethod = 'FILTER_VALIDATE_'; 
    } else { 
     return; 
    } 
    switch ($type) { 
     case 'email': 
     case 'string': 
     case 'number_int': 
     case 'int': 
     case 'special_chars': 
     case 'url': 
     $filtertype = $filtermethod.strtoupper($type); 
     break; 
    } 

    if ($filtertype == 'FILTER_VALIDATE_EMAIL' && !empty($string)) { 
     list($local,$domain) = explode('@',$string); 

     $localLength = strlen($local); 
     $domainLength = strlen($domain); 

     $checkLocal = explode('.',$domain); 

     if (($localLength > 0 && $localLength < 65) && ($domainLength > 3 && $domainLength < 256) && (checkdnsrr($domain,'MX') || checkdnsrr($domain,'A') || ($checkLocal[1] == 'loc' || $checkLocal[1] == 'dev' || $checkLocal[1] == 'srv'))) { // check for "loc, dev, srv" added to cater for specific problems with local setups 
      $validEmail = true; 
     } else { 
      $validEmail = false; 
     } 
    } 
    if (($filtertype == 'FILTER_VALIDATE_EMAIL' && $validEmail) || $filtertype != 'FILTER_VALIDATE_EMAIL') { 
     return filter_var($string, constant($filtertype)); 
    } else { 
     return false; 
    } 
} 
+0

うん、私はそれが標準規格に従った有効なEメールアドレスを知っているが、誰もドメインの代わりにIPアドレスを使用する人はいません。また、フィルタを通過する有効ではありえない奇妙な電子メールの例がたくさんあります。私は、あなたが含まれている機能を見てみましょう、ありがとう! – Hector

+0

@Hector特に['checkdnsrr'](http://php.net/manual/en/function.checkdnsrr.php#117880)では一見しています。 –

+1

「誰もいない」というのはちょっとした分類です。 IPに電子メールを送ることは完全に有効ですが、一般的ではありませんが、あまり知られていない電子メールを持つ方法です.IP上に電子メールサーバーを設定し、IPが特に登録されていない限り、それを追跡することは少し難しいものになります(例えば何も偽造することなく)。 – junkfoodjunkie

関連する問題