【问题标题】:What is the correct regular expression for an email address? [duplicate]电子邮件地址的正确正则表达式是什么? [复制]
【发布时间】:2010-10-01 19:55:57
【问题描述】:

重复Using a regular expression to validate an email address


网上似乎有很多不同的变体,想知道是否有明确的答案?

最好使用正则表达式的 .net (Regex) 方言。

【问题讨论】:

标签: regex email


【解决方案1】:
【解决方案2】:

regular-expressions 表示这个匹配率约为 99%

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

【讨论】:

  • 我讨厌那个链接页面,以及作者对可接受的权衡取舍的想法。这是他列出的正则表达式的更好版本之一。
【解决方案3】:

确定的答案?还是正常的答案?

我之所以这么问,是因为正式电子邮件地址规范允许大多数人懒得解释的各种奇怪的东西(括号、引用的短语等)。

请参阅this page 以获取 comprehensivenormal 正则表达式的列表。

【讨论】:

    【解决方案4】:

    我认为电子邮件正则表达式验证没有灵丹妙药。

    人们通常做的是只验证错误,比如没有@和一个点。然后向该地址发送电子邮件验证。这是确保他们的电子邮件确实有效的唯一方法。

    【讨论】:

      【解决方案5】:

      前段时间我也遇到过同样的问题。 RFC 2822 定义了它,根据this page 这个很有用,是我选择的那个:“[a-z0-9!#$%&'+/=?^_{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_{|} ~-]+)@(?:a-z0-9?.)+(?:[AZ]{2}|com|org|net|gov|mil|biz|info|mobi|name|航空|工作|博物馆)\b"

      【讨论】:

      • 为什么需要在其中包含顶级域名?例如 .ca 和 .uk 呢?
      • 还有,.asia。试图确保域在正则表达式中有效是徒劳的,而不是正则表达式的目的。正则表达式只应确保其格式有效。
      • 这些仅适用于匹配 US 地址。当您使用它时,您应该只 ping 域并检查它是否有效。那么你就不必制作一个包含所有可以想象到的后缀的正则表达式了。
      【解决方案6】:
      [a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
      

      可能希望在所有小写版本旁边添加 A-Z,以便也允许大写字母。

      【讨论】:

      • 或者只是在不区分大小写模式下使用它
      【解决方案7】:

      我不知道这个问题是否有一个明确的答案,但如果你不去实际检查域是否存在,电子邮件地址归结为<username>@<domain>,其中<domain> 至少包含一个点,两个到后缀中的四个字符。你可以做各种各样的事情来检查非法/特殊字符,但最简单的一种是:

      ^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$

      【讨论】:

      • 为什么是[\w-\.]+
      猜你喜欢
      • 2010-10-16
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      • 2012-01-25
      相关资源
      最近更新 更多