【问题标题】:blank space in multiple email addresses after ","“,”之后的多个电子邮件地址中的空格
【发布时间】:2012-01-03 14:25:54
【问题描述】:

我正在使用 RegularExpressionValidator 验证多个电子邮件地址,以逗号“,”分隔

我下面的表达式可以很好地满足这个要求:

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

要求这个表达式应该能够处理电子邮件地址中逗号后的空格。

例如我当前的 email1@domain.com,email2@domain.com 的表达式工作文件 但它不做的是 email1@domain.com, email2@domain.com

我知道可以有很多解决方案,但在我看来,最好的办法是增强这种表达方式。

请指导我

【问题讨论】:

  • 我无法回答您的问题,但我想指出您的正则表达式 isn't optimal

标签: c# asp.net regex email-validation


【解决方案1】:

您可以使用现有的正则表达式,而是用每个逗号分隔字符串并修剪尾随/前导空格:

var emails = input.Split(',');
foreach (var email in emails.Select(ee => ee.Trim()))
{
    if (!emailValidator.IsMatch(email))
    {
        // announce a bad email
    }
}

【讨论】:

    【解决方案2】:

    这是我的建议:

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

    这将接受电子邮件地址之间的空格

    【讨论】:

    • 感谢@Fischermaen,您的建议奏效了。但是您能否也请指导一下为什么 "((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)* ([,\s])*)*" 不起作用,我读到 \s 表示空格?请指导。
    • 在方括号内,每个字符都被解释为一个字符,\s 将匹配一个` and a s`,而不是你想要的空格。
    【解决方案3】:

    除了 Fischermaen 所说的之外,另一种选择可能是将电子邮件拆分为单独的电子邮件,然后分别验证每封电子邮件。

       var emails = emailString.split(',');
       for(var i = 0; i < emails.length; i++){
          var email = emails[i].trim().replace(',', '');
          // Now you can validate a single, comma-less, space-less email;
       }
    

    【讨论】:

      猜你喜欢
      • 2015-01-23
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 2013-07-29
      相关资源
      最近更新 更多