【问题标题】:Regular Expression - Validate Gmail addresses正则表达式 - 验证 Gmail 地址
【发布时间】:2013-04-24 19:54:00
【问题描述】:

我正在尝试创建一个表达式来验证 Gmail 地址。 这就是我到目前为止所做的。

^([\w]*[\w\.]*(?!\.)@gmail.com)

我正在尝试创建一个表达式来验证 Gmail 地址。 这就是我到目前为止所做的。

但它没有按我的意愿工作。

Gmail 地址:

  1. 第一个和最后一个字符必须是 [a-z0-9]
  2. 用户名内容仅 [a-z0-9.]
  3. 不能有连续的句点(即:e..o@gmail.com [This is wrong])
  4. 用户名的长度必须在 6 到 30 个字母之间。

说实话,我对正则表达式没有太多经验。

顺便问一下,有正则表达式的文档吗?

【问题讨论】:

  • 另外,@ 之前的部分必须至少有 6 个字母数字(不包括点!)字符。
  • 如果这是一个假设对 GMail 地址的某些要求的分配,那没关系 - 但您声明的要求并不是 GMail 实际执行的要求。名称中的双点是允许的(并且被忽略),以+ 开头的后缀也是如此。名称部分和“gmail.com”域名不区分大小写,因此允许使用大写字母。我不知道所有的规则。你的实际目标是什么? (很难想到您想要验证 gmail 地址和 gmail 地址的应用程序。)
  • 扩展@KeithThompson 的回复。您的正则表达式要求满足 gmail 地址的注册条件。您忽略了这样一个事实,即 gmail 允许您在用户名的末尾添加一个 +,然后在它后面添加任何您想要的文本。它还允许您添加任意数量的点(甚至在用户名的开头/结尾处)。它还接受具有不同大小写的地址。您糟糕的规范使您要求的正则表达式在现实世界中毫无用处。最好使用officially compliant regex
  • 我的 gmail 地址中没有 gmail.com。

标签: regex


【解决方案1】:

你没有告诉你使用的是哪个正则表达式实现。

^[a-z0-9](\.?[a-z0-9]){5,}@g(oogle)?mail\.com$
  • [a-z0-9]第一个字符
  • (\.?[a-z0-9]){5,} 后面至少有五个字母数字字符,前面可能有一个点(参见@Daniel 的评论,抄自@Christopher 的回答)
  • g(oogle)?mailgmail 或 googlemail(请参阅 @alroc 的回答)

您可能还想使用不区分大小写的模式匹配。 (JavaScript 中的/.../i。)

【讨论】:

  • 匹配a@gmail.com,因为?,这是故意的吗?
  • @ChristopherCreutzig,不,不是。已更正。谢谢!
  • 另外,{4,} 也计算点数。请参阅我的答案,了解不需要也不需要前瞻的替代方案。
  • @user2137179,请考虑支持对您有帮助的答案。 (W. B. Reed 的,alroc 的……)
  • 这个答案不完整...someone+something@gmail.com 是一个有效的 gmail 地址...这个正则表达式不匹配它...这是我的版本:^[a-z0-9]((\.|\+)?[a-z0-9]){5,}@g(oogle)?mail\.com$
【解决方案2】:

用于匹配 Gmail 的简单正则表达式:

^[\w.+\-]+@gmail\.com$

匹配,如果在字符串的开头有\w(字母数字或下划线字符)或.+-,则匹配一次或多次,然后是@gmail.com在结尾字符串。

您可以在regexpal 进行测试。

顺便问一下,有正则表达式的文档吗?

Google is your friend :)

【讨论】:

  • 谢谢,但这不是我想要的。您的表达式与这些示例匹配 (.aabb@gmail.com|aa..bb@gmail.com|aabb.@gmail.com),这是错误的。
  • 你用\W做什么?
【解决方案3】:
/([a-zA-Z0-9]+)([\_\.\-{1}])?([a-zA-Z0-9]+)\@([a-zA-Z0-9]+)([\.])([a-zA-Z\.]+)/g

这是用于验证所有电子邮件地址的电子邮件地址的正则表达式。

  1. ([a-zA-Z0-9]+) - 将匹配第一个可以包含 a-z、A-Z 和 0-9 的单词
  2. ([_.-{1}]) - 将匹配 _, -, .在第一个单词之后
  3. ? - 将匹配前一个标记的 0(false) 和 1(true)。
  4. ([a-zA-Z0-9]+) - 将匹配可以包含 a-z、A-Z 和 0-9 的第二个单词
  5. \@ - 将匹配特殊字符@
  6. ([a-zA-Z0-9]+) - 将匹配@之后的域名单词
  7. ([.]) - 将匹配。
  8. ([a-zA-Z.]+) - 将匹配电子邮件 ID 的最后一个单词,可以是 com、co.in、org 等。

但 gmail 不允许使用其他特殊字符,因此对于 gmail 电子邮件地址,正则表达式将比这更容易,如下所示:

/([a-zA-Z0-9]+)([\.{1}])?([a-zA-Z0-9]+)\@gmail([\.])com/g
  1. ([a-zA-Z0-9]+) - 将匹配第一个可以包含 a-z、A-Z 和 0-9 的单词
  2. ([.{1}]) - 将匹配 .在第一个单词之后
  3. ? - 将匹配前一个标记的 0(false) 和 1(true)。
  4. ([a-zA-Z0-9]+) - 将匹配可以包含 a-z、A-Z 和 0-9 的第二个单词
  5. \@ - 将匹配特殊字符@
  6. gmail - 将匹配@之后的域名 gmail 一词
  7. ([.]) - 将匹配。
  8. com - 将匹配电子邮件 ID 的最后一个单词,即 com

【讨论】:

  • 感谢 Yogesh !!将 gmail 正则表达式更改为 ([a-zA-Z0-9]+)([\.{1}])?([a-zA-Z0-9]+)\@(?:gmail|GMAIL) ([\.])(?:com|COM) 接受大写和小写
【解决方案4】:

有很多关于正则表达式的文档,但您必须确保获得的文档与您的环境所具有的特定正则表达式风格相匹配。是的,有很多方言。话虽如此,据我所知,“掌握正则表达式”仍然是终极参考。

至于你的具体问题,我可能会使用

^[a-z0-9](\.?[a-z0-9]){5,}@gmail\.com$

警告:我没有检查您给出的规则是否正确。一般的电子邮件地址当然不会跟随它们。

【讨论】:

  • 谢谢克里斯托弗,但是你写的^[a-z0-9](\.?[a-z0-9]){5,29}@gmail\.com$a.b.c.d.e.f.g.h.i.j.k.l.1.2.3.4.5.6.7.8.9@gmail.com 匹配,这不是我想要的。这就是为什么我接受了凯的回答。
  • 当然,你应该接受任何你认为正确的东西——但除了我没有写{5,29},因为我将这个限制放在第二次测试中,我很好奇至于凯的答案与我的答案有何不同。据我所知,现在他复制了我建议的本地部分,而他以前的版本没有检查至少六个非点字符的存在。
【解决方案5】:

RFC 2822 指定了有效电子邮件地址的构成,这在here 中进行了讨论。但正如该页面指出的那样,您不能在没有真正阅读并理解它的作用的情况下就接受它。

您在这里处于优势,因为您希望地址始终以 @gmail.com 结尾,这会缩小您的正则表达式的范围(您可以拆分 @ 并仅验证前半部分)。

顺便说一句,GMail 不是世界各地的 gmail.com - 在英国和德国,您也可以找到 googlemail.com

网络上有很多关于正则表达式的文档,但是您应该确保阅读您使用的库/引擎如何处理事情。实现之间存在细微差别。

【讨论】:

    【解决方案6】:

    您可以使用此常规表达的任何邮件

    ([a-zA-Z0-9_.-]+)@([a-zA-Z]+)([\.])([a-zA-Z]+)

    1)([a-zA-Z0-9_.-]+) - check a-z, A-Z, and 0-9, _, ., -
    2)([a-zA-Z]+)    - check a-z, A-Z, and 0-9
    3) @             - will match special character @
    4)([\.])         - dot(.) in regular expression have any character so if search dot(.) character then use [\.]
    5) same step 2
    
    Python

    import re pattern = r'([a-zA-Z0-9_.-]+)@([a-zA-Z]+)([\.])([a-zA-Z]+)' re.match(pattern, 'any@any.any')

    输出:
    <re.Match object; span=(0, 11), match='any@any.com'>

    【讨论】:

      【解决方案7】:

      found 一个效果很好的解决方案

      ^[a-z0-9]+(?!.*(?:\+{2,}|\-{2,}|\.{2,}))(?:[\.+\-]{0,1}[a-z0-9])*@gmail\.com$
      

      它将匹配以下有效的电子邮件地址

      niceandsimple@gmail.com
      very.common@gmail.com
      disposable.style.email.with+symbol@gmail.com
      other.email-with-dash@gmail.com
      

      虽然它不会匹配任何一个

      invalid--email@gmail.com
      invalid++email@gmail.com
      invalid..email@gmail.com
      -invalid-email@gmail.com
      invalid--email-@gmail.com
      

      【讨论】:

        【解决方案8】:

        在回答您的其他问题时:

        这是正则表达式文档的链接:http://www.regular-expressions.info/ 只需 google 一下“mylanguage regex”,就可以为您使用的特定语言提供更多帮助

        【讨论】:

        • 谢谢。那会很有帮助。
        【解决方案9】:

        我的解决方案是^[a-zA-Z][-_.a-zA-Z0-9]{5,29}@g(oogle)?mail.com$

        【讨论】:

          【解决方案10】:
          ([a-zA-Z0-9\.]{5,15})\@gmail[\.]com
          

          【讨论】:

          • 这不符合要求,并且表现出对正则表达式的许多常见(尽管大多数情况下是无害的)误解。
          猜你喜欢
          • 1970-01-01
          • 2012-04-17
          • 1970-01-01
          • 2012-07-12
          • 2011-07-14
          • 1970-01-01
          • 1970-01-01
          • 2018-04-28
          • 1970-01-01
          相关资源
          最近更新 更多