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

Php 正在验证电子邮件地址-停止双点,php,Php,我目前正在发送电子邮件。我有一个单独的电子邮件验证脚本,在使用SwiftMailer发送之前检查电子邮件,确保它们有效。它工作得很好 但是,我的验证器不会在电子邮件地址中偶然发现双点(..),例如: 本。。sinclair@email.com 或 本。sinclair@email..com 这是我的密码。。。如果他们在电子邮件地址中的任何位置添加双点,我需要添加什么来给出错误 function valid_email($email) { if (preg_match("/[_a-z0-9

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

但是,我的验证器不会在电子邮件地址中偶然发现双点(..),例如:

本。。sinclair@email.com 或 本。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;
}

filter\u var建议的答案:filter\u VALIDATE\u电子邮件验证没有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;
}
函数checkEmailAddress($email=”“){
$email=trim($email);
$email=str_replace(“,”,$email);
if(filter\u var($email,filter\u VALIDATE\u email)==FALSE)
返回FALSE;
如果(substr_count($email,'@')>1)//多个'@'?
返回FALSE;
如果(预匹配(“\\[\\\\\\\\\\\\\\\n\r\*\\\\\'”&\%!\(\)\\\\\\\[\]\?\\/\s]\\\\”,$email))
返回FALSE;
else if(preg|u match(“/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}{124;[0-9]{1,4})(\]?)$/”,$email))
返回TRUE;
其他的
返回FALSE;
}

希望它有帮助:)

回答筛选建议:筛选验证电子邮件验证没有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;
}
函数checkEmailAddress($email=”“){
$email=trim($email);
$email=str_replace(“,”,$email);
if(filter\u var($email,filter\u VALIDATE\u email)==FALSE)
返回FALSE;
如果(substr_count($email,'@')>1)//多个'@'?
返回FALSE;
如果(预匹配(“\\[\\\\\\\\\\\\\\\n\r\*\\\\\'”&\%!\(\)\\\\\\\[\]\?\\/\s]\\\\”,$email))
返回FALSE;
else if(preg|u match(“/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}{124;[0-9]{1,4})(\]?)$/”,$email))
返回TRUE;
其他的
返回FALSE;
}

希望有帮助:)

您尝试过:
filter\u var('ben。sinclair@email..com,过滤(验证电子邮件)
+宙斯的一本书,别再讲了:)你试过了吗:
filter\u var('ben。sinclair@email..com,过滤(验证电子邮件)
+宙斯的一本书,别再讲了:)我甚至不知道过滤邮件!这太棒了,需要多次检查以确保其正常工作。你太棒了!还有,关于停止双点的线索吗?您的代码似乎也没有接收到它…”name@example“是有效的,但只能用于内部网络网站,这就是为什么FILTER_VALIDATE_EMAIL允许它。如果你正在编写一个公共网站的代码,那么你应该做额外的验证。请参阅此答案和注释:还有多个@和unicode字符也是有效的,这取决于您的电子邮件服务器是否支持这些字符。举个例子,Gmail支持它。甚至不知道过滤邮件!这太棒了,需要多次检查以确保其正常工作。你太棒了!还有,关于停止双点的线索吗?您的代码似乎也没有接收到它…”name@example“是有效的,但只能用于内部网络网站,这就是为什么FILTER_VALIDATE_EMAIL允许它。如果你正在编写一个公共网站的代码,那么你应该做额外的验证。请参阅此答案和注释:还有多个@和unicode字符也是有效的,这取决于您的电子邮件服务器是否支持这些字符。例如,Gmail支持它。