【问题标题】:Pattern matching email address using regular expressions [duplicate]使用正则表达式的模式匹配电子邮件地址[重复]
【发布时间】:2011-08-17 05:00:01
【问题描述】:

使用正则表达式过滤电子邮件地址:我是正则表达式的新手,希望有人能提供帮助。

我正在尝试使用以下格式匹配电子邮件地址字符串:

FirstName.LastName@gmail.com

我想确保在“@”字符之前的某个地方有一个句点,并且“@”字符之后的字符与 gmail.com 匹配

【问题讨论】:

    标签: regex email-address


    【解决方案1】:

    检查有效的电子邮件

    ^(?:(?!.*?[.]{2})[a-zA-Z0-9](?:[a-zA-Z0-9.+!%-]{1,64}|)|\"[a-zA-Z0-9.+!% -]{1,64}\")@[a-zA-Z0-9][a-zA-Z0-9.-]+(.[a-z]{2,}|.[0-9]{1,})$
    

    强制规则:

    • 必须以字母数字字符开头
    • 只能有字母数字和@._-% char
    • 不能有 2 个连续的。除了带引号的字符串
    • @前的字符只能是字母数字和._-%,引号字符串除外
    • 中间必须有@
    • 需要至少有 1 个。在域部分中
    • 域部分不能有双 -
    • 域部分只能包含字母数字和 .- 字符
    • 需要以 2 个或更多字母的有效扩展名结尾
    • 支持IP地址(test@1.1.1.1)
    • 支持引用的用户名

    【讨论】:

    • 仅供参考,它大喊test@gm. 是一个有效的电子邮件,而不是
    • 修复了这个和其他一些小错误
    • 感谢您的提示,我根据您提供的维基百科链接中列出的有效和无效链接做了一些调整。
    【解决方案2】:

    我使用以下正则表达式来验证电子邮件地址。我还为此添加了一个 C# 语言的小代码 sn-p。

    正则表达式 - "^[a-zA-Z0-9]{3,20}@gmail.com$"

    代码:-

    static void Main(string[] args)
            {
                Console.WriteLine("Enter Your Text ");
                string input = Console.ReadLine();
                Console.WriteLine("The Text that you have entered is :" + input);
                Console.ReadLine();
    
                string pattern = "^[a-zA-Z0-9]{3,20}@gmail.com$";
                Regex regex = new Regex(pattern);
                bool results = regex.IsMatch(input);
                Console.WriteLine(results.ToString());
                Console.ReadLine();
            }
    

    ∂øøµ$∂å¥!@gmail.com 等电子邮件也已在此处检查并显示为假。 ;-)

    【讨论】:

    • 似乎这与 OP 指定的时间段不匹配。也许您还可以澄清为什么它只匹配 3 到 20 个字符
    • {3,20} 表示,输入文本必须有 3 到 20 个数字字符。由于此问题与电子邮件验证有关,因此我将其添加为验证的更多步骤。
    • 对,但这意味着它将无法匹配非常长的电子邮件地址。它也将在 OP 询问的电子邮件地址类型上失败,在哪里有句号
    • 1.无法匹配非常长的电子邮件地址。 :- 您可以将 {3,20} 编辑为 {3,} 2. 句点 :- 使用此正则表达式进行整个验证 ^[a-z0- 9A-Z]{1,}[.][a-z0-9A-Z]{1,}@gmail.com$ 抱歉回复延迟。
    【解决方案3】:

    您想要在点前后添加一些符号,所以我建议.+\..+@gmail\.com

    .+ 表示任何符号 (.) 可以出现 1 次或多次 (+)
    \. 表示点符号;用反斜杠筛选以抑制 . 的特殊含义
    @gmailcom 应该完全匹配。

    另见Regular Expression Basic Syntax Reference

    编辑:帐户名称的 gmail 规则只允许拉丁字母、数字和点,因此更好的正则表达式是
    [a-zA-Z0-9]+\.[a-zA-Z0-9]+@gmail\.com

    【讨论】:

    • 只是添加; @Brad 为了成为有效的电子邮件(它们不能以. 开头或结尾),+ 是必要的,尽管电子邮件正则表达式变得非常复杂,因为有效的规范地址。
    • 非常感谢!它按预期工作,感谢您给我定义。接下来我将尝试找出匹配以下电话号码字符串。 (111) 111-1111
    • 使用这样的正则表达式,诸如 ∂øøµ$∂å¥!@gmail.com 之类的电子邮件将是有效的。有没有更精确和安全的正则表达式来解决这个问题?
    • @Yasky:当然;我将其添加到答案中。感谢您指出这一点!
    【解决方案4】:

    假设.是任意字符的Unix风格:.*\..*@gmail\.com

    编辑:转义域中的.

    【讨论】:

    • 需要转义 .在 gmail.com 中(例如 gmail\.com)
    【解决方案5】:

    你没有告诉我们你需要什么样的正则表达式风格,但是这个例子适合大多数人:

    .*\..*@gmail.com
    

    【讨论】:

      【解决方案6】:

      您甚至不需要正则表达式,因为您的要求非常具体。不确定您使用的是什么语言,但大多数人会支持在@ 上进行拆分并检查.。在python中:

      name, _, domain = email.partition('@')
      if '.' in name and domain == 'gmail.com':
          # valid
      

      【讨论】:

        猜你喜欢
        • 2019-05-18
        • 1970-01-01
        • 2016-12-23
        • 1970-01-01
        • 1970-01-01
        • 2015-08-24
        • 2016-11-15
        相关资源
        最近更新 更多