正则表达式Python验证电子邮件

时间:2014-11-18 04:11:12

标签: python regex

我在尝试满足此正则表达式的要求时遇到了麻烦,如下所述。

^[A-Za-z0-9]{1,}|^[A-Za-z0-9]{1,}[\-\_]\.[a-zA-Z]{2,}@[A-Za-z0-9][\-\_]{5,}\.[a-zA-Z]{2,}$

" 您的电子邮件和重新输入的电子邮件不得为空,且必须包含acct@domain表格

  • acct

    1. 1个或多个字符
    2. 仅由大写或小写字母字符组成, 数字字符,短划线,句号,下划线和连字符
    3. 不包含嵌入的空白。
    4. 无法以下划线,短划线,句号或连字符开头或结尾。
    5. 每个时段之前和之后必须至少有两个字母。

  • domain
    1. 5个或更多字符
    2. 仅由大写或小写字母字符,数字字符,短划线,句点和连字符组成,下划线
    3. 不包含嵌入的空白
    4. 必须至少有一个句号,并且不能以下划线,短划线,句号或连字符开头或结尾。
    5. 每个时段之前和之后必须至少有两个字母。

  • 电子邮件地址必须在帐户之间包含@

示例有效的电子邮件地址:

a@aa.ca, a@aaAAA-c.cc_3.com

示例无效的电子邮件地址:

b@b, b@b.b, b@bb.bb!c

两个电子邮件地址必须相同"

2 个答案:

答案 0 :(得分:3)

以下是可以验证所有标准的正则表达式,我希望它也更有效。

^(?![\W_])((?:([\w-]{2,})\.?){1,})(?<![\W_])@(?![\W_])(?=[\w.-]{5,})(?=.+\..+)(?1)(?<![\W_])$

请查看regex demo以获取详细概述。

答案 1 :(得分:1)

你的正则表达式可以大大简化(可能比这个例子更加简单),但是因为你的标准实际上比你的例子更复杂:

^[a-z]([\w-]*[a-z]|[\w-.]*[a-z]{2,}|[a-z])*@[a-z]([\w-]*[a-z]|[\w-.]*[a-z]{2,}|[a-z]){4,}?\.[a-z]{2,}$

示例:http://regex101.com/r/gE4wK2/2(请注意不区分大小写的选项)

然而,更大的问题在于您提供的有效样本中的差异。

帐户:

  • 1个或多个字符
    • [a-z]确保帐户中至少存在一个字符
  • 仅由大写或小写字母,数字,句点,下划线和连字符组成,并且不包含空格
    • ([\w-]*)确保可以包含任何字母或连字符
  • 无法以下划线,连字符或句点开头或结尾
    • ([a-z]|[a-z])*确保最后一个字符(如果存在)是一个字母
  • 每个时段之前和之后必须至少有两个字母
    • [\w-.]*[a-z]{2,}确保如果有句号,则必须有两个字母。

您已经可以看到a@aa.ca之类的示例不应该匹配。

帐户与域名之间必须存在@符号

  • 这很简单:表达式中有一个@字面值。

<强>域

  • 5个或更多字符
    • (...big long expression...){4,}确保在初始域名信函(共5个)之后有4个附加字符
  • 仅由大写或小写字母字符,数字字符,连字符,句点和下划线组成,不包含空格
    • ([\w-]*[a-z])钉一个
  • 必须至少有一个时期
    • 表达式\.
    • 中包含句点字面值
  • 无法以下划线,连字符或句点开头或结尾
    • [a-z]确保域的第一个字符是字母
  • 每个时段之前和之后必须至少有两个字母
    • [\w-.]*[a-z]{2,}如果字符串中有句点,则必须跟随2个字母
    • [a-z]{2,}$确保域名期限后至少有两个字母
  

所有这一切,我仍然主张使用复杂的正则表达式来验证电子邮件地址:阅读http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/

     

最后,检查一下超级基本的电子邮件地址,例如^.*?@.*?\..*?$,然后发送该内容!