【问题标题】:Regular expression to validate comma separated email addresses?正则表达式来验证逗号分隔的电子邮件地址?
【发布时间】:2011-07-29 08:01:01
【问题描述】:

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

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

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

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

但是相同的表达式在 C# 中没有验证?它对无效地址也表示有效。

请纠正我或建议我验证电子邮件地址的表达式。

【问题讨论】:

    标签: c# asp.net regex


    【解决方案1】:

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

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

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

    ^ 匹配字符串的开头

    $ 匹配字符串的结尾

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

    【讨论】:

    • 谢谢。我在 (str.match(/^((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)) 中使用它*)*([,])*)*$/gi) != null); _ _ _ _ 没有编辑器可以为此做正确的语法高亮,但它是正确的。适用于 Chrome 和 FF。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        试试这个~

        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
        }
        

        【讨论】:

          【解决方案5】:

          试试这个,

              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;
              }
          

          【讨论】:

            【解决方案6】:

            使用以下正则表达式,它将解决您的问题。以下正则表达式也将使用逗号来处理 post 和 pre 空格

            /^((([a-zA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+).([a-zA-Z\s?]{2 ,5}){1,25})(\s?,\s*?))$/

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-06-22
              • 1970-01-01
              • 1970-01-01
              • 2017-06-10
              • 1970-01-01
              • 1970-01-01
              • 2011-05-20
              相关资源
              最近更新 更多