在 PHP 中使用正则表达式进行电子邮件验证

Posted

技术标签:

【中文标题】在 PHP 中使用正则表达式进行电子邮件验证【英文标题】:Email validation using regular expression in PHP 【发布时间】:2012-11-23 01:51:35 【问题描述】:

我对正则表达式非常陌生。我正在用 php 开发一个项目,我需要验证电子邮件地址。在这个网站和谷歌搜索后,我发现下面的正则表达式说它应该是最好的。

if (preg_match("/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?))255,)(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?))65,@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]64,)(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.)1,126)1,(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]1,4(?::[a-f0-9]1,4)7)|(?:(?!(?:.*[a-f0-9][:\]])7,)(?:[a-f0-9]1,4(?::[a-f0-9]1,4)0,5)?::(?:[a-f0-9]1,4(?::[a-f0-9]1,4)0,5)?)))|(?:(?:IPv6:(?:(?:[a-f0-9]1,4(?::[a-f0-9]1,4)5:)|(?:(?!(?:.*[a-f0-9]:)5,)(?:[a-f0-9]1,4(?::[a-f0-9]1,4)0,3)?::(?:[a-f0-9]1,4(?::[a-f0-9]1,4)0,3:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]2)|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]2)|(?:[1-9]?[0-9])))3))\]))$/iD", strtolower($mail_address))) 
    echo "valid email";

但是当我使用它时,我会收到错误提示,

"Warning: preg_match(): No ending delimiter '/' found"

这段代码有什么问题?

【问题讨论】:

电子邮件验证是一条模糊的沟,但我不得不说你的正则表达式看起来相当可疑;这是一个答案很好的线程,它引用了 Django 中使用的正则表达式:***.com/questions/3217682/… 编辑:Wayne 下面的答案也应该适合你! 【参考方案1】:
/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]2,6$/ix

【讨论】:

【参考方案2】:

电子邮件验证正则表达式(带有子域的域)

^((([a-z0-9]+[\-]0,1)+[a-z0-9]+?\.)+[a-z0-9][a-z0-9|\-]+[a-z0-9])@([a-z0-9]+[\-|\.]0,1[a-z0-9]+)+(.[a-z0-9]2,)+$

样本测试https://regex101.com/r/w5VBdf/20

带有子域的域

^([a-z0-9]+[\.|\-]0,1[a-z0-9](.[a-z0-9]2,)+)$

https://regex101.com/r/4Un8Tz/2

电子邮件用户名

^([a-z0-9]+[\.|\-]0,1[a-z0-9]1,)+@$

https://regex101.com/r/4Un8Tz/6

【讨论】:

此解决方案可能无法回答 OP 问题 请看看这些网站:TLD list; valid/invalid addresses; regex for RFC822 email address 你可以用?替换0,1,用+替换1,,用[\.|\-]替换[.-],你应该学习一些基础的正则表达式(并重新阅读问题),有一个看regular-expressions.info【参考方案3】:

我来这里是为了寻找解决方案,Wayne Whitty 提出的答案确实可以完成这项工作。

顺便说一句,我认为值得一提的是filter_var 函数不符合 RFC5321。虽然文档没有说是,但某些 RFC5321 有效的电子邮件地址会被此功能标记为无效,例如:

localpart.ending.with.dot.@example.com (评论)localpart@example.com “这是v@lid!”@example.com “非常不寻常”@example.com 邮箱@com admin@mailserver1 "()[]:,;@\"\!#$%&'*+-/=?^_`| ~.a"@example.org " "@example.org

正如这条评论所呈现的http://php.net/manual/pt_BR/function.filter-var.php#112492

【讨论】:

【参考方案4】:

检查电子邮件是否有效的方法不止一种。

一个简单的方法是使用这个函数:

function validate($email) 
    return preg_match("/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/", $email);    

来自此处的代码 sn-p:Basic Email Validation in PHP

虽然这种实现在大多数情况下都可以正常工作,但它可能会允许一些错误的电子邮件。 以下实现应该 100% 准确,但也相当复杂:

function validate($email) 

    $isValid = true;
    $atIndex = strrpos($email, "@");

    if (is_bool($atIndex) && !$atIndex) 
        $isValid = false;
     else 
        $domain = substr($email, $atIndex + 1);
        $local = substr($email, 0, $atIndex);
        $localLen = strlen($local);
        $domainLen = strlen($domain);

        if ($localLen < 1 || $localLen > 64) 
            $isValid = false;
         else if ($domainLen < 1 || $domainLen > 255) 
            $isValid = false;
         else if ($local[0] == '.' || $local[$localLen - 1] == '.') 
            $isValid = false;
         else if (preg_match('/\\.\\./', $local)) 
            $isValid = false;
         else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) 
            $isValid = false;
         else if (preg_match('/\\.\\./', $domain)) 
            $isValid = false;
         else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^|~.-])+$/', str_replace("\\\\", "", $local))) 
            if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\", "", $local))) 
                $isValid = false;
            
        

        if ($isValid && !(checkdnsrr($domain, "MX") || checkdnsrr($domain ,"A"))) 
            $isValid = false;
        
    

    return $isValid;

此代码来自此处的 sn-p:Strict Email Validation in PHP

希望这会有所帮助!

【讨论】:

第二种实现无效。例如,foo@héhé.fr 是一个有效的电子邮件地址,函数会拒绝它。 foo(bar)@yahoo.comfoo" "@yahoo.comfoo"&lt;"@yahoo.comfoo"&gt;"@yahoo.com 等也一样。 简单但如果电子邮件域以“.co.uk”结尾怎么办?这种模式将不起作用......另外,你可以用 \w 替换这个“a-zA-Z0-9_”【参考方案5】:

使用这些正则表达式执行更彻底的验证。例如,它可以防止电子邮件地址中的相邻句点(如 aaa..bbb@example..com)根据 RFC 822 是无效的。

function isValidEmail($email)

    return preg_match('/\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]2,4\z/', $email)
        && preg_match('/^(?=.1,64@.4,64$)(?=.6,100$).*/', $email);

见validate email address using regular expression in PHP。

【讨论】:

不适用于许多有效的电子邮件,例如:Jean-François+@anydomain.museum【参考方案6】:

用这个代替正则表达式:

if(filter_var($email, FILTER_VALIDATE_EMAIL)) 
     //Valid email!

使用正则表达式验证电子邮件地址是 not recommended,因为它肯定是 not pretty,尤其是如果您不想排除拥有根据 RFC 822 语法正确的有效电子邮件地址的人。

http://www.php.net/filter_var 是您最好的选择。

一个尝试根据 RFC 822 语法验证电子邮件地址的正则表达式的疯狂示例:

(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ 
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
 \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
 \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] 
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] 
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
 \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)

【讨论】:

我喜欢 filter_var() 但不是 user@localhost(是的,我知道 RFC 2822 与 RFC 2821 的争论,只是为了验证 2821 是不可能的,因为我们还没有谈论发送电子邮件)。那么 IDNA acc 呢? RFC 3490 ex: user@dömain.com。同意,对于一般用途,这个工作得很好,但仍然不是 100% 可靠。 哦!顺便说一下,值得一提的是RFC 822 已过时,RFC 2822 现在用于 Internet 消息格式 filter_var 并不完全可靠,因为我遇到过一些完全有效的电子邮件 - petrović@fictionaldomain.com 被拒绝的情况。我仍在寻找一种方法将这个 - /^\pL+$/ui - 包含到 filter_var 中,因为它似乎涵盖了我需要的东西 - 验证电子邮件,并允许非英语拉丁字符通过。 用于电子邮件验证的正则表达式的上帝版本:)【参考方案7】:

看起来你真的不需要更大的代码来验证电子邮件。

<?php
$email = "abc123@sdsd.com"; 
$regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]2,3)$/'; 
if (preg_match($regex, $email)) 
 echo $email . " is a valid email. We can accept it.";
 else  
 echo $email . " is an invalid email. Please try again.";
           
?>

试试这个让我知道

【讨论】:

不适用于(例如)超过 3 个字符的域扩展。不要使用这个。【参考方案8】:

很奇怪,我刚刚尝试了你的代码对我很有效?! 尝试使用字符“....”而不是“....”关闭任何链

【讨论】:

【参考方案9】:

您应该使用函数filter_vars() 来验证您的输入,而不是您自己的正则表达式。

例子:

filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)

文档中的更多信息:http://php.net/manual/en/function.filter-var.php

【讨论】:

我喜欢 filter_var() 但不是 user@localhost(是的,我知道 RFC 2822 与 RFC 2821 的争论,只是为了验证 2821 是不可能的,因为我们还没有谈论发送电子邮件)。那么 IDNA acc 呢? RFC 3490 ex: user@dömain.com。同意,对于一般用途,这个工作得很好,但仍然不是 100% 可靠。【参考方案10】:

删除正则表达式末尾的iD

【讨论】:

【参考方案11】:

试试这个正则表达式会很好用

/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]2,6)$/  

或php过滤器filter_var

 filter_var($email, FILTER_VALIDATE_EMAIL)

喜欢

if(filter_var($email, FILTER_VALIDATE_EMAIL)) 
     //yup its valid email

【讨论】:

以上是关于在 PHP 中使用正则表达式进行电子邮件验证的主要内容,如果未能解决你的问题,请参考以下文章

PHP正则表达式

使用文档对象在页面上创建学生信息表。 信息表包括学号姓名性别电子邮件联系电话个人主页和联系地址, 信息表内容通过表单输入,提交前先使用正则表达式进行验证,联系地址不能超过20

10个常用的PHP正则表达式

php正则表达式验证(邮件地址Url地址电话号码邮政编码)

使用正则表达式验证电子邮件

根据 RFC5321/RFC5322 对电子邮件地址进行正则表达式验证