多年来,我慢慢地开发了一个正则表达式,它可以正确验证大多数电子邮件地址,假设它们不使用IP地址作为服务器部分。

我在几个PHP程序中使用它,而且大多数时候都可以使用。然而,不时有人与我联系,他们对使用它的网站有问题,我最终不得不做出一些调整(最近我意识到我不允许四个字符的TLD)。

你有或见过验证电子邮件的最佳正则表达式是什么?

我见过几种使用函数的解决方案,这些函数使用了几个较短的表达式,但我宁愿在简单函数中使用一个长的复杂表达式,而不是在更复杂的函数中使用几个短表达式。


当前回答

有关验证电子邮件地址的最佳正则表达式的最全面评估,请参阅此链接;“比较电子邮件地址验证正则表达式”

以下是当前的顶级表达式,以供参考:

/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i

其他回答

如前所述,您不能使用正则表达式验证电子邮件。然而,这是我们目前用来确保用户输入不是完全虚假的(忘记TLD等)。

此正则表达式将允许IDN域和@符号前后的特殊字符(如Umlauts)。

/^[\w.+-_]+@[^.][\w.-]*\.[\w-]{2,63}$/iu

我从不麻烦用自己的正则表达式创建,因为很可能其他人已经提出了更好的版本。我总是使用regexlib来找到一个我喜欢的。

为这个问题发布的正则表达式现在已经过时了,因为新的通用顶级域(gTLD)即将到来(例如,伦敦、篮球、。通販). 要验证电子邮件地址,有两个答案(这将与绝大多数人相关)。

正如主要答案所说,不要使用正则表达式。只需通过向该地址发送电子邮件来验证它(捕获无效地址的异常)使用一个非常通用的正则表达式,至少确保他们使用的是一个类似于{something}@{some}的电子邮件结构。{一些}。使用一个详细的正则表达式是没有意义的,因为你不会全部抓住它们,几年后会有一个新的批处理,你必须再次更新正则表达式。

我决定使用正则表达式,因为不幸的是,有些用户没有读取表单,并将错误的数据放在错误的字段中。这至少会在他们试图将非电子邮件的内容输入到电子邮件输入字段时提醒他们,这样可以为您节省一些时间来支持用户处理电子邮件问题。

(.+)@(.+){2,}\.(.+){2,}

根据RFC 2821和RFC 2822,电子邮件地址的本地部分可以使用以下任意ASCII字符:

大写和小写字母数字0到9字符!#$%&'*+-/=^_`{|}~字符“.”,前提是它不是本地部分中的第一个或最后一个字符。

比赛:

一个&d@somedomain.com一个*d@somedomain.com一个/d@somedomain.com

不匹配项:

.abc@somedomain.comabc.@somedomain.coma>b@somedomain.com

对于符合RFC 2821和2822的,可以使用:

^((([!#$%&'*+\-/=?^_`{|}~\w])|([!#$%&'*+\-/=?^_`{|}~\w][!#$%&'*+\-/=?^_`{|}~\.\w]{0,}[!#$%&'*+\-/=?^_`{|}~\w]))[@]\w+([-.]\w+)*\.\w+([-.]\w+)*)$

电子邮件-符合RFC 2821、2822

您可以对任何电子邮件地址使用以下正则表达式:

^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$

对于PHP

function checkEmailValidation($email)
{
    $expression = '/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/';
    if(preg_match($expression, $email))
    {
        return true;
    }
    else
    {
        return false;
    }
}

对于JavaScript

function checkEmailValidation(email)
{
    var pattern = '/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/';
    if(pattern.test(email))
    {
        return true;
    }
    else
    {
        return false;
    }
}