非常松散的电子邮件正则表

时间:2012-02-02 10:33:51

标签: validation email utf-8

我想要一个非常宽松的正则表达式来验证电子邮件

一些例子:

anyCharacter@anycharacter.anycharacter

空格将被视为无效(包括结尾和开头的空格),多个@@后的点:

  1. $£“$ @ $£”$ @ kdjsad $“£$ .dsad343 - 有效
  2. ξδησκξδη@φδσαφδσ.φδσφ - 有效(所有utf-8字符应有效)
  3. hdjsh jdhsd.gmail.com - 无效
  4. ldksl .gmail.com - 无效
  5. dldks.gma il.com - 无效
  6. 测试@ .gmail.com - 无效
  7. τεστtest@ gma!“¬ilγμαιλ.ψψομcomd** %% $ - 有效
  8. 我正在尝试修改此^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 但我有一些麻烦,你的帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

验证电子邮件地址时应该非常小心。我不是说你不应该这样做,但是你需要知道,写一个100%准确的电子邮件地址验证将是非常困难的,并且通过一个不太完美的,你可能仍然允许无效地址和(更糟)阻止合法用户。

有许多模糊的案例在技术上是有效的(即使它们很少使用,迟早可能会破坏世界某处写得不好的电子邮件服务器)。您需要决定是否要允许来自少数用户的地址。

您的用户可能已经(足以获得)包含引号@符号的电子邮件地址。 例如"the-address-has-two-@-symbols"@example.com

事实上,你可以在一个地址的非域部分中拥有几乎任何你能想到的角色(只要它们被引用),甚至可以出现空格:"Forename Surname"@example.com

在您的示例中:£££τεστtest@gma!"¬ilγμαιλ.ψψομcomd**%%$实际上无效,因为domain names may only contain letters (a-z), numbers, dots and hyphens。 因此,假设您正在进行不区分大小写的匹配,并且您确实想要检查有效的域名,那么您应该能够简化表达式(从您的评论中获取)到

^\D+([-+.']\D+)*\S[^\@]+@[a-z0-9]+[a-z0-9\-\.]*$

您还可以进一步进行域验证,但要正确执行此操作需要阅读RFC 2396