用于电子邮件验证的正则表达式

regex for email validation

本问题已经有最佳答案,请猛点这里访问。

我已经编写了下面的regex来进行一个非常简单的电子邮件验证。我计划发送一个确认链接。

但是,我希望从当前状态增强它,因为这样的字符串不会产生所需的结果:

test,[email protected],测试

"测试"部分不希望包含在比赛中。我尝试过单词边界,但没有成功。

  • 我应该如何修改?
  • 尽管我保持了这一点,但是否有任何有效的电子邮件格式可以排除?
  • 谢谢!


    这要复杂得多!!!!请参阅mail::rfc822::address,然后害怕……非常害怕。


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

    相反,来自mail.python.org/pipermail/python-list1,由本·芬尼编写。

    The best advice I've seen when people ask"How do I validate whether
    an email address is valid?" was"Try sending mail to it".

    It's both Pythonic, and truly the best way. If you actually want to
    confirm, don't try to validate it statically; use the email address,
    and check the result. Send an email to that address, and don't use it
    any further unless you get a reply saying"yes, this is the right
    address to use" from the recipient.

    The sending system's mail transport agent, not regular expressions,
    determines which part is the domain to send the mail to.

    The domain name system, not regular expressions, determines what
    domains are valid, and what host should receive mail for that domain.

    Most especially, the receiving mail system, not regular expressions,
    determines what local-parts are valid.

    1这是它死前的原始链接


    你所使用的几乎没有任何短到有意义的东西能真正验证电子邮件地址。说到这里,我通常使用的是:

    它实际上是用于ASP.NET的电子邮件地址正则表达式验证器的内置regex。

    注意:这个线程中给出的许多regex可能在90年代起作用,但在当今的Web环境中,TLD允许少于2个字符,多于4个字符。例如,[email protected]是一个有效的电子邮件地址,因为.museum是那些新的、长的TLD之一。


    我发现,不将整个电子邮件地址与正则表达式匹配,而是更实际地将字符串拆分为@和:

    • 首先通过DNS库检查现有MX或域部分的记录。
    • 然后对照一个更简单的regex检查本地部分(@左侧的部分)。

    进行DNS检查的原因是,尽管符合RFC,但无法访问的电子邮件地址毫无价值。另外检查A记录的原因是,当找不到MX记录时,它们用于确定将邮件传递到何处。(见RFC2821,3.6)

    进一步提示:

    • 使用一个强大的DNS解析程序库,不要卷自己的。对大公司进行测试。这些服务器有时有大量的邮件服务器,这会导致问题。我在BMW.com上看到了一辆小车图书馆。只是说。:)

    而不是。尝试匹配除s(空白)以外的每个字符:


    这是来自Regex Buddy(绝对需要购买Prog!)


    较小的两步regex提供了良好的结果

    /**检查电子邮件地址的格式是否有效。*邮箱的前导字符必须是alpha*剩余字符字母数字加u和点*域基必须至少为2个字符*域扩展名必须至少为2,不超过4个字母*允许子域。*@版本050208添加了撇号作为有效字符*@版本04/25/07单封电子邮件地址和单封*允许使用字母域名。*/公共静态布尔ISvalidEmailAddress(字符串地址){字符串SReXEP;