我想要一个非常宽松的正则表达式来验证电子邮件
一些例子:
anyCharacter@anycharacter.anycharacter
空格将被视为无效(包括结尾和开头的空格),多个@
或@
后的点:
我正在尝试修改此^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
但我有一些麻烦,你的帮助将不胜感激。
答案 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。