验证电子邮件地址 - 停止双点

时间:2011-11-16 02:35:59

标签: php

我目前SwiftMailer发送电子邮件。我有一个单独的电子邮件验证脚本,在使用SwiftMailer发送之前检查电子邮件以确保它们有效。它运作得很好。

但是,我的验证器不会在电子邮件地址中拾取意外的双点(..),如:

ben..sinclair @ email.com 要么 ben.sinclair @ email..com

这是我的代码......如果他们在电子邮件地址的任何地方放置双点,我需要添加什么才能给出错误?

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;
}

1 个答案:

答案 0 :(得分:1)

回答filter_var建议:FILTER_VALIDATE_EMAIL在没有tld的情况下验证,它并不完美,它认为 name @ example 是一个有效的电子邮件地址,例如它不是。

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;
}

希望它有所帮助:)