鉴于我的域名模式为
domain.com
sub.domain.com
*.com
*.domain.com
sub.*.com
鉴于我将使用以下格式的电子邮件地址
user@domain.com
user@sub.domain.com
是否可以使用1个正则表达式模式来查找电子邮件地址是否与域模式之一匹配?
答案 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]+");