正则表达式,用于将电子邮件地址匹配到域

时间:2018-08-31 11:14:52

标签: c# regex

鉴于我的域名模式为

domain.com
sub.domain.com
*.com
*.domain.com
sub.*.com

鉴于我将使用以下格式的电子邮件地址

user@domain.com
user@sub.domain.com

是否可以使用1个正则表达式模式来查找电子邮件地址是否与域模式之一匹配?

4 个答案:

答案 0 :(得分:0)

在这种情况下,*。com包含所有其他模式。您可以检查电子邮件endwith .com是否足够

List<string> emails = new List<string>
                      {
                          "a@domain.com",
                          "a@sub.domain.com",
                          "a@asd.com",
                          "a@.sub.asdas.com",
                          "a@.sub.asdas.com",
                      };

Regex regex = new Regex(@"(domain\.com)|(sub\.*\.com)");

emails= emails.Where(e => regex.IsMatch(e)).ToList();

如果要使用正则表达式检查多个模式,可以使用|

List<string> emails = new List<string>
                      {
                          "a@domain.com",
                          "a@sub.domain.com",
                          "a@asd.com",
                          "a@.sub.asdas.com",
                          "a@.sub.asdas.com",
                      };

Regex regex = new Regex(@"(domain.com)|(sub.*.com)");

emails= emails.Where(e => regex.IsMatch(e)).ToList();

答案 1 :(得分:0)

尝试此正则表达式:

  

^ [a-zA-Z0-9 _。+-] + @(?:(?:[a-zA-Z0-9-] +。)?[a-zA-Z] +。)?( provider1 | provider2)。(domain1 | domain2)$

通过以下示例对此正则表达式进行了尝试:abc123@provider1.domain1-有效

正则表达式用于子域为

的电子邮件
  

^ [a-zA-Z0-9 _。+-] + @(?:(?:[a-zA-Z0-9-] +。)?[a-zA-Z] +。)?( sub1 | sub2)。(provider1 | provider2)。(domain1 | domain2)$

它将与任何域和邮件服务提供商一起使用。我已经尝试过了,并且可以使用

答案 2 :(得分:0)

您不需要正则表达式。可以用linq完成:

            string[] domains = { "*.sub.domain.com", "*.com", "*.domain.com", "sub.*.com" };

            string email = "abc.sub.domain.com";
            string user = "abc";

            bool match = domains.Any(x => x.Replace("*", user) == email);

答案 3 :(得分:0)

我最终同意了

myPattern.Replace("*", myPattern.StartsWith("*") ? "@[A-Za-z0-9]+" : "[A-Za-z0-9]+");