正则表达式验证逗号分隔的电子邮件地址?

时间:2011-07-29 08:01:02

标签: c# asp.net regex

我需要验证可以是单个或多个以逗号分隔的电子邮件地址。

在我在正则表达式验证器中使用之前,表达式如下:

string exp = @"((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*";

它正在验证多个或一个电子邮件地址。

但同样的表达方式在C#中并不具有价值?它表示对无效地址有效。

请更正我或建议我验证电子邮件收件人的表达。

6 个答案:

答案 0 :(得分:16)

请提供更多详情。哪些地址匹配为有效,但应无效?你如何调用正则表达式(你的c#代码)?

我看到的一点是你缺少锚点。

 ^((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$

^匹配字符串的开头

$匹配字符串

的结尾

如果您不使用它们,您的模式会在找到有效的子字符串后立即匹配。

答案 1 :(得分:4)

我不知道C#我可以提出一个想法 按','分割,验证每个分隔符 .....简单

答案 2 :(得分:4)

在不知道你是如何进行验证的情况下,很难说为什么C#正在验证验证器拒绝的某些字符串。很可能是因为验证器正在查看整个字符串,而您在C#中使用Regex.IsMatch(),如果substring匹配,它也会接受匹配。要解决此问题,请在开始时添加\A,在正则表达式结尾添加\Z。在你的情况下,整个正则表达式是可选的(由(...)*括起来)所以它也匹配空字符串 - 你想允许吗?

然后,您可能想要完全重新考虑正则表达式方法 - 没有理智的正则表达式可以正确验证电子邮件地址(并且您仍然会传递看起来有效但没有的地址与他们相关的实际帐户)。

答案 3 :(得分:1)

试试这个〜

try {
    Regex regexObj = new Regex(@"([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6},?)*", RegexOptions.IgnoreCase | RegexOptions.Multiline);
    if (regexObj.IsMatch(subjectString)) {
        // Successful match
    } else {
        // Match attempt failed
    } 
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}

答案 4 :(得分:1)

试试这个,

    private bool IsValidMultipleEmail1(string value)
    {
        Regex _Regex = new Regex(@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");

        string[] _emails = value.Split(new char[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries);

        foreach (string email in _emails)
        {
            if (!_Regex.IsMatch(email))
                return false;
        }

        return true;
    }

答案 5 :(得分:0)

使用以下正则表达式,它将解决您的问题。以下正则表达式将使用逗号来接收帖子和前置空格

/ ^((([A-ZA-Z0-9 _-。] +)@([A-ZA-Z0-9 _-。] +)。([A-ZA-Z \ S?] {2- ,5}){1,25})(\ s ?,\ s *?) $ /