【问题标题】:Struggling with email regular expression; can you help?与电子邮件正则表达式作斗争;你能帮我吗?
【发布时间】:2011-01-20 18:57:22
【问题描述】:

好的,所以我知道使用 RegEx 完全验证电子邮件地址是不可能的,我会尝试通过电子邮件发送它并让用户单击验证链接。但是,这是 A-level 项目的一部分,我会因此获得额外的复杂度,所以我想知道您是否可以帮助我。我正在尝试编写一封电子邮件验证正则表达式,它遵循以下规则:

电子邮件地址必须由本地部分和域部分组成,由 @ 符号 (x40) 分隔,组合长度不超过 256 个字符。

本地部分:

未加引号的本地部分可能由 (a-z)、(A-Z)、数字 (0-9) 和以下字符组成: !#$%&'*+-/=? ^_{`|}~ 检查

点也可能出现在本地部分,但不能是第一个或最后一个字符,也不能与另一个点相邻 (.) ALMOST CHECK, DOT CAN STILL BE LAST

本地部分的最大长度为 64 个字符。可能会忽略 - 不检查

域部分:

域部分由点分隔标签组成,每个标签由 1 到 63 个字符组成,最大总长度为 255 个字符(包括点分隔符)。检查

域标签必须以字母 (a-z) (A-Z) 或数字 (0-9) 字符开头和结尾,并且可以包含连字符 (-)。此外,TLD(最后一个标签)必须包含至少一个字母字符或连字符(并非全部为数字),并且至少为两个字符。 - 检查

大写是我在实现目标方面走了多远。我遇到的主要问题是确保点不能是域本地部分的最后一个字符。到目前为止,这是我的正则表达式:

/^[A-z0-9!#$%&'*+\/=?^_{|}~-]([A-z0-9!#$%&'*+\/=?^_{|}~-]|(.(?!.))){0,62}[ A-z0-9!#$%&'*+\/=?^_`{|}~-]?@([A-z0-9-]{1,63}.){1,126}[A-z- ]{2,63}$/

编辑:灰色部分的开头和结尾应该有反引号。

【问题讨论】:

  • 到底什么是“a-level项目”,什么是“复杂点”?这是某种学校项目吗?如果是这样,您不应该自己解决吗?
  • 大学项目,是的,我应该这样做,但它让我很烦。
  • 哦,A-Levels 相当于英国的 AP,假设你来自美国。
  • 亲爱的上帝,你把它弄复杂了?难怪英国经济正在南下。
  • 想必他会因为匹配更复杂的规范而获得更多积分。

标签: javascript regex email


【解决方案1】:

从技术上讲,RFC 2822 投诉 RegEx 将是:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

不过,您或许应该看看 http://www.regular-expressions.info/email.html。

【讨论】:

  • 其实,上面的 RegEx 和链接页面上的简化示例都允许连续的点。 (例如 hel..lo@email.com),当它实际上无效时将匹配。我还是卡住了。
  • 可能连续的点是协议的一部分。
【解决方案2】:
/^[a-z0-9!#$%&'*+\/=?^_`{|}~-](\.?[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@([a-z0-9]([A-z0-9-]{0,61}[A-z0-9])?\.)+([A-z][A-z0-9]+|[A-z0-9]+[A-z]|([A-z0-9]+[A-z-]+[A-z0-9]?)+[A-z0-9]+)$/

完成了:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-02
    • 2015-08-20
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    相关资源
    最近更新 更多