多年来我慢慢地制订了正确,验证大多数的电子邮件地址的正则表达式假定他们不作为的一部分,服务器使用的 IP 地址。

在某些 PHP 程序,使用它,它的工作大部分时间。但是,时常我获得联系的人有使用它的网站上出现了问题,我不得不进行一些调整 (最近我意识到我没有允许 Tld 4 个字符)。

什么是最佳的正则表达式具有或已经看到用于验证电子邮件?

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

2008-09-20 15:00:47
问题评论:

好的但 Tld 可能 uptop 63 个字符长stackoverflow.com/a/9239264/1660683因此您 regext 将不会检测到 TLD 旅行或博物馆

什么是 TLD 概览

警告-此失误出大写字母 !

我删除了表达式问题因为它看起来会引起混淆。但愿,将推动朝下而不是获取挂住是坏在 2010年和 2015年处于严重的表达式的答案的人。

我不想为,创建一个不同的答案,但我想说是来检查它是否具有唯一合理的方法来验证电子邮件地址在实践中 @ 在其中。有的只是没有理由得到更充分的。地址可能是有效的但不存在,并为该可以检查任何正则表达式;一个不存在的地址是不会好于无效的地址。

回答:

没有这一问题的简单正则表达式︰ 看到此完全符合 RFC‑822-正则表达式,即算作简单。(它是编写之前的语法模式)。RFC 5322中指定的语法是基元的正则表达式太复杂。

Perl 和 PCRE,PHP 中的复杂语法模式可以设法正确分析 RFC 5322 毫无所有。Python 和 C# 也应该能够管理,但它们使用不同的语法,从这第三个。但是,如果您不得不使用一种更强大的模式匹配语言少的多,则最好使用真正的解析器。

还有一点需要了解,它验证每个 RFC 告诉您完全没有任何有关是否该地址实际上存在在提供的域中,或输入地址的人是否是其真正的所有者。人签署其他人到邮件列表这样所有的时间。修复程序需要某种更别致涉及包含确认令牌打算进入相同的 web 页相同的地址的邮件,发送该地址的有效性。

确认标记是人的知道你进入它的地址的唯一办法。这就是为什么大多数的邮寄列表现在使用该机制以确认注册。毕竟,任何人都可以放下president@whitehouse.gov,和,甚至将分析为法律,但它不可能是在另一端的人。

对于 PHP,您应该使用在验证电子邮件地址与 PHP,右方式从中我报价中给出的模式

还有一些危险的常见用法,并广泛的混乱编码将建立的电子邮件地址事实上比录制的正式标准更严格的标准。

这是不会好于其他所有非 RFC 模式。它不是甚至足够的智能来处理甚至为RFC 822,更别提 RFC 5322。这样,但是,是的。

如果您想要获取别致和 pedantic,实现完整状态引擎正则表达式只能充当的只是初级的筛选器。正则表达式的问题是,告诉其他人他们非常有效的电子邮件地址无效 (假阳性) 因为正则表达式不能处理它不仅仅是礼貌和 impolite 从用户的角度来看。为目的的状态引擎可以验证和甚至被认为无效因为该分解根据每个 RFC 的电子邮件地址的正确的电子邮件地址。这样可能会更令人满意的体验中,如下所示

指定电子邮件地址 myemail@address,com 是无效的。你的意思是 myemail@address.com?

请参阅验证电子邮件地址,包括评论。将电子邮件地址验证正则表达式进行比较.

Regular expression visualization

Debuggex 演示

您所说的"没有不好的正则表达式。"是这一般或特定的电子邮件地址验证?

@Tomalak︰ 仅用于电子邮件地址。正如 bortzmeyer 所说,RFC 是非常复杂

美丽的ietf.org/rfc/rfc5322.txt :-)

你刚才提到的 linux 杂志文章是在几个方面的实际问题。尤其 Lovell 显然还没有读到 RFC3696 的勘误表和重复一些 RFC 的已发布版本中的错误。一下︰ dominicsayers.com/isemail

Jeff Atwood 有可爱的正则表达式在此博客文章来验证所有有效的电子邮件地址︰ codinghorror.com/blog/2005/02/regex-use-vs-regex-abuse.html

不应使用正则表达式来验证电子邮件地址。

相反,使用邮件地址类,如下︰

try {
    address = new MailAddress(address).Address;
} catch(FormatException) {
    //address is invalid
}

邮件地址类使用 BNF 分析器验证完全遵照 RFC822 地址。

如果您确实想要使用正则表达式,这就是那个:

(?:(?:
)?[ 	])*(?:(?:(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	]
)+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:

)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(
?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 
	]))*"(?:(?:
)?[ 	])*))*@(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-
31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*
](?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+
(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:
(?:
)?[ 	])*))*|(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+|
|(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)
?[ 	])*)*<(?:(?:
)?[ 	])*(?:@(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
r
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[
 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)
?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	]
)*))*(?:,@(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[
 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*
)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	]
)+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*)
*:(?:(?:
)?[ 	])*)?(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+
||(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:

)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:

)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	
]))*"(?:(?:
)?[ 	])*))*@(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31
]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](
?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?
:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?
:
)?[ 	])*))*>(?:(?:
)?[ 	])*)|(?:[^()<>@,;:".[] 00-31]+(?:(?
:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?
[ 	]))*"(?:(?:
)?[ 	])*)*:(?:(?:
)?[ 	])*(?:(?:(?:[^()<>@,;:".[] 
00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|
.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>

@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"
(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*))*@(?:(?:
)?[ 	]
)*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:
".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?
:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[
]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*|(?:[^()<>@,;:".[] 00-
31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(
?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*)*<(?:(?:
)?[ 	])*(?:@(?:[^()<>@,;
:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([
^[]
]|.)*](?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:"
.[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[
]
]|.)*](?:(?:
)?[ 	])*))*(?:,@(?:(?:
)?[ 	])*(?:[^()<>@,;:".
[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
r]|.)*](?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 
00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]
|.)*](?:(?:
)?[ 	])*))*)*:(?:(?:
)?[ 	])*)?(?:[^()<>@,;:".[] 
00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|
.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,
;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?
:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*))*@(?:(?:
)?[ 	])*
(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".
[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[
^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]
]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*>(?:(?:
)?[ 	])*)(?:,s*(
?:(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:
".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*)(?:.(?:(
?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[
["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	
])*))*@(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	
])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*)(?
:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+|
|(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*|(?:
[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[
]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*)*<(?:(?:
)
?[ 	])*(?:@(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["
()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*)(?:.(?:(?:
)
?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>

@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*(?:,@(?:(?:
)?[
 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,
;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	]
)*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:
".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*)*:(?:(?:
)?[ 	])*)?
(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".
[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*)(?:.(?:(?:

)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[[
"()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])
*))*@(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])
+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*)(?:
.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+|
|(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*>(?:(
?:
)?[ 	])*))*)?;s*)

SLaks︰ 我真的很抱歉。似乎什么看起来像它将一个非常有用的项目被毁了。我不知道出了什么问题,但我怀疑,可能已经和你的猫躺在键盘上。您可能需要对其进行编辑时,您有机会。别担心,它最好的我们发生的变化。

您会发现.NET 4.0 中的邮件地址类则在验证电子邮件地址与在早期版本中的要好得多。我做给它一些重大改进。

我认为它某种程度上......不适合数据更简单的 id。a@b 不会验证。ar@b.com 匹配只钱柜 ar@b,.com 的不匹配。但是,类似于"我是 me"@[10.10.10.10] 呢 !:)

此正则表达式的优点在于,它是那么明显正在进行的工作

@MatthewLock︰ 这就是fake@not-a-real-domain.name比没有更糟。必须不依赖于电子邮件验证,以防止 XSS。

这个问题问得最多,但我认为应该回溯并问问自己为什么想要语法验证电子邮件地址吗?什么好处的是真的?

  • 它将不会捕获常见的键入错误。
  • 它不阻止输入无效或虚构的电子邮件地址,或输入其他人的地址的人。

如果您想要验证电子邮件是否正确,则只能比发送确认电子邮件并让用户选择的回复。在许多情况下,将发送确认邮件仍出于安全原因或出于道德原因 (因此,例如,您不能登录到他们将对服务的人)。

它可能值得检查它们在客户端验证,只是为了捕捉的简单错误的字段中输入 something@something,但一般情况下是正确。

马丁,我给你 + 1,只是为了以后读取该 foobar@dk 是有效的电子邮件。它不是完美的但如果您想要将这两种 RFC 兼容和使用常识,应该检测到这种情况下并要求用户确认这就是正确的。

@olavk︰ 如果有人输入拼写错误 (如︰ me@hotmail),他们显然不会收到确认电子邮件,然后在它们吗?它们不在您的网站更多,他们想知道为什么他们不能注册。实际上没有他们不 — 他们完全忘了关于您的信息。但是,如果它们仍然与您在操作时,只可以做基本性能与正则表达式检查,然后它们能够捕获错误马上和您有快乐的用户。

@JacquesB︰ 使一个极好的点。只是因为它通过 RFC 每 muster 并不意味着它真的是该用户的地址。否则,所有那些president@whitehouse.gov地址指示非常 netbusy commander-in-chief。:)

它并不一定是黑色或白色。如果该电子邮件看起来不正确,则让用户知道。如果用户仍要继续,告诉他。不强制用户符合您正则表达式,而不是,可以使用正则表达式作为一种工具来帮助用户知道可能会出现错误。

这取决于您的最佳的意思︰ 如果您正在谈论捕捉每个有效的电子邮件地址中使用以下字符︰

(?:(?:
)?[ 	])*(?:(?:(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	]
)+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:

)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(
?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 
	]))*"(?:(?:
)?[ 	])*))*@(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-
31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*
](?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+
(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:
(?:
)?[ 	])*))*|(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+|
|(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)
?[ 	])*)*<(?:(?:
)?[ 	])*(?:@(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
r
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[
 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)
?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	]
)*))*(?:,@(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[
 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*
)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	]
)+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*)
*:(?:(?:
)?[ 	])*)?(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+
||(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:

)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:

)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	
]))*"(?:(?:
)?[ 	])*))*@(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31
]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](
?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?
:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?
:
)?[ 	])*))*>(?:(?:
)?[ 	])*)|(?:[^()<>@,;:".[] 00-31]+(?:(?
:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?
[ 	]))*"(?:(?:
)?[ 	])*)*:(?:(?:
)?[ 	])*(?:(?:(?:[^()<>@,;:".[] 
00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|
.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>
@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"
(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*))*@(?:(?:
)?[ 	]
)*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:
".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?
:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[
]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*|(?:[^()<>@,;:".[] 00-
31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|.|(
?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*)*<(?:(?:
)?[ 	])*(?:@(?:[^()<>@,;
:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([
^[]
]|.)*](?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:"
.[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[
]
]|.)*](?:(?:
)?[ 	])*))*(?:,@(?:(?:
)?[ 	])*(?:[^()<>@,;:".
[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
r]|.)*](?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 
00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|[([^[]
]
|.)*](?:(?:
)?[ 	])*))*)*:(?:(?:
)?[ 	])*)?(?:[^()<>@,;:".[] 
00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?:[^"
]|
.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[^()<>@,
;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]]))|"(?
:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*))*@(?:(?:
)?[ 	])*
(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".
[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	])*(?:[
^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[]
]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*>(?:(?:
)?[ 	])*)(?:,s*(
?:(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:
".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*)(?:.(?:(
?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[
["()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	
])*))*@(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	
])+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*)(?
:.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+|
|(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*|(?:
[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".[
]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*)*<(?:(?:
)
?[ 	])*(?:@(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["
()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*)(?:.(?:(?:
)
?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>
@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*(?:,@(?:(?:
)?[
 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,
;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*)(?:.(?:(?:
)?[ 	]
)*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:
".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*)*:(?:(?:
)?[ 	])*)?
(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[["()<>@,;:".
[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])*)(?:.(?:(?:

)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+||(?=[[
"()<>@,;:".[]]))|"(?:[^"
]|.|(?:(?:
)?[ 	]))*"(?:(?:
)?[ 	])
*))*@(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])
+||(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*)(?:
.(?:(?:
)?[ 	])*(?:[^()<>@,;:".[] 00-31]+(?:(?:(?:
)?[ 	])+|
|(?=[["()<>@,;:".[]]))|[([^[]
]|.)*](?:(?:
)?[ 	])*))*>(?:(
?:
)?[ 	])*))*)?;s*)

(http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html)如果您正在寻找更简单的事情,但该语句将捕捉最有效的电子邮件地址尝试类似的内容︰

"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$"

编辑︰ 从以下链接︰

此正则表达式只能验证地址已添加的注释去掉替换空白 (这是由模块)。

它不匹配的所有地址,一些必须先转换。从链接:"此正则表达式将仅验证地址已添加的注释去掉替换空白 (这是由模块)。"

您可以为我错误地传递的第二个,但由较长的正则表达式捕获某些email address的示例?

得多,尽管我做一次爱它,这就是 RFC 822 验证程序,不RFC 5322之一。

在 @Lazer.valid@example.com 是一个简单的示例。不允许您在本地部分中有两个连续的不带引号的点。

@Mikhail perl,但不是应实际使用它。

[更新]我已经逐份打印有关电子邮件地址验证我知道的一切︰ http://isemail.info,它现在不仅验证但也诊断问题的电子邮件地址。我同意很多注释下面的验证只是一部分的答案;我在http://isemail.info/about的论述,请参阅.

is_email() 将保持,据我所知,只验证程序将告诉您明确给定的字符串是否是有效的电子邮件地址。我已经上载新版本在http://isemail.info/

我逐份打印 Cal 亨德、 Dave 子、 Phil Haack,Doug Lovell、 RFC5322 和 RFC 3696 从测试用例。在全部的 275 测试地址。我对无法找到的所有可用验证运行所有这些测试。

我想人们增强其验证程序将此页保持最新。对于他们的帮助和合作中编译这些测试和建设性的批评,我自己的验证程序的 Cal、 迈克尔 •,Dave,Paul 和 Phil,谢谢.

人们尤其应注意根据 RFC 3696 勘误表三个规范的示例实际上是无效的地址。和一个地址的最大长度为 254 或 256 个字符, 320。

您可以添加到该张贴内容从一个吗?它是从电子邮件有效?

您可能会更加具体,一点 Evan 吗?

此验证程序也似乎正确。[......通过.time]Hm,看上去只是 RFC 5322,不 3693 或勘误表适切。

截至目前,该 is_email() 链接被破坏。.

很好。这里我们不仅得到很好的论述,我们得到验证测试人员以及要下载的库。很好的答案 !

请输入您的翻译

Using a regular expression to validate an email address

确认取消