由分号分隔的多个电子邮件目标的正则表达式

时间:2013-08-28 11:59:20

标签: c# regex

我成功为这样的单个电子邮件做正则表达式:

private readonly Regex _regex = new Regex(@"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
                                          + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");

现在,我需要为多个电子邮件制作正则表达式,并以分号分隔

test@gmail.com;test2@yahoo.com;test3@gmail.com

我找到了这个正则表达式:

\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;]\s*\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*

但是这个正则表达式也“接收”了这个字符串的问题:

h@kj.com;asds@gmail

我该怎么做?

由于

1 个答案:

答案 0 :(得分:2)

我们不要为多个构建正则表达式,因为这个表达式足够复杂,只需单独验证它们:

foreach (var email in emailList.Split(new char[] { ';' },
    StringSplitOptions.RemoveEmptyEntries))
{
    // validate email
}

此外,正则表达式并不适合这样的事情,因为用户可能在分号之前或之后放置一个空格,多个空格 - 它只是变得混乱 - 而且电子邮件已经非常混乱了。