2011-11-16 16 views
1

私は現在SwiftMailerで電子メールを送信しています。 SwiftMailerを使用して送信する前に、電子メールが有効であることを確認する電子メール検証スクリプトが別途用意されています。それはかなりうまくいく。 @ email..com電子メールアドレスの検証 - ダブルドットの停止

ben.sinclair @ email.com OR ben..sinclair

しかし、私のバリデータのような電子メールアドレスでの不慮の二重ドット(..)をピックアップしていません

ここに私のコードがあります...電子メールアドレスのどこにでもダブルドットを置くとエラーになるために何を追加する必要がありますか? filter_var提案へ

function valid_email($email) { 
    if (preg_match("/[_a-z0-9-]+(\.[_a-z0-9-]+)*@([_0-9a-z][_0-9a-z-]*[_0-9a-z]\.)+[0-9a-z][a-z]+/", $email, $matches)) 
     return true; 
    return false; 
} 
+6

に役立ちます願っています、あなたは試してみました: 'にfilter_var( 'ben.sinclair @ email..com'、FILTER_VALIDATE_EMAILを)'; –

+1

+1ゼウスの本、weelを止めないでください:) –

答えて

1

答え:FILTER_VALIDATE_EMAILはなしTLDを検証し、それはそれは、例えば、ではありませんしながら、例 @名が有効な電子メールaddrにあると考えて、完璧ではありません。

function checkEmailAddress($email = "") { 
    $email = trim($email); 
    $email = str_replace(" ", "", $email); 
    if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) 
     return FALSE; 
    if (substr_count($email, '@') > 1)//more than one '@'? 
     return FALSE; 
    if (preg_match("#[\;\#\n\r\*\'\"<>&\%\!\(\)\{\}\[\]\?\\/\s]#", $email)) 
     return FALSE; 
    else if (preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,4})(\]?)$/", $email)) 
     return TRUE; 
    else 
     return FALSE; 
} 

は、それが:)

+0

FILTER_VALIDATE_EMAILについて知りませんでした!それは素晴らしいことです、それが動作することを確認するために何度かチェックすることをお勧めします。あなたはロック! –

+0

また、ダブルドットを停止する手掛かりはありますか?あなたのコードはそれを拾っていないようです... –

+0

"name @ example"は有効ですが、内部ネットワークのWebサイトでのみ使用できます。そのため、FILTER_VALIDATE_EMAILで許可されています。公開ウェブサイトをコーディングする場合は、追加の検証を行う必要があります。この回答とコメントを参照してください:http://stackoverflow.com/a/20573804また、複数の@とユニコード文字も有効です、あなたの電子メールサーバーがそれらをサポートしているかどうかだけです。一例として、Gmailがサポートしています。 –

関連する問題