如何使用正则表达式验证多个电子邮件地址?

4
在Stackoverflow上进行了快速研究后,我没有找到任何使用正则表达式进行多个电子邮件验证的解决方案(拆分JS函数不适用,但某些原因是应用程序的后端等待由电子邮件以;分隔的字符串)。以下是要求:1.电子邮件应使用以下规则进行验证:[A-Za-z0-9\._%-]+@[A-Za-z0-9\.-]+\.[A-Za-z]{2,4}; 2.Regex应接受作为分隔符; 3.电子邮件可以写在多行上,以结尾; 4.Regex可以将行尾视为。我想出了这个解决方案:^[A-Za-z0-9\._%-]+@[A-Za-z0-9\.-]+\.[A-Za-z]{2,4}(?:[;][A-Za-z0-9\._%-]+@[A-Za-z0-9\.-]+\.[A-Za-z]{2,4}?)*,但它对于#3-4不起作用。因此,以下是可以的情况: 1.john@smith.com;john@smith.com 2.john@smith.com;john@smith.com; 3.john@smith.com; john@smith.com; jjoh@smith.com;以下是绝对不行的情况:1.john@smith.com jackob@smith.com 2.jackob@smith.com, 3.daniels@mail.com smth@mail.com。感谢任何形式的帮助。

2
为什么split不可行? - Joseph
https://dev59.com/X3I-5IYBdhLWcg3wq6do - mVChr
为什么3不行?根据规则4,正则表达式可以将行尾作为;接受,并且两个电子邮件地址之间由行尾分隔。 - mathematical.coffee
这是一个简短的故事:为了更改JavaScript代码,我不得不编写长达3-4天才能获得批准的报告,为什么我要更改“不在我的范围内”的代码。 - John Smith
@Michael,真的吗?那我应该尽快修复错误并离开我的工作。 - John Smith
显示剩余3条评论
3个回答

2

这是我的做法(ASP.Net应用程序,没有jQuery)。电子邮件地址列表在多行文本框中输入:

function ValidateRecipientEmailList(source, args)
{
  var rlTextBox     = $get('<%= RecipientList.ClientID %>');
  var recipientlist = rlTextBox.value;
  var valid         = 0;
  var invalid       = 0;

  // Break the recipient list up into lines. For consistency with CLR regular i/o, we'll accept any sequence of CR and LF characters as an end-of-line marker.
  // Then we iterate over the resulting array of lines
  var lines = recipientlist.split( /[\r\n]+/ ) ;
  for ( i = 0 ; i < lines.length ; ++i )
  {
    var line = lines[i] ; // pull the line from the array

    // Split each line on a sequence of 1 or more whitespace, colon, semicolon or comma characters.
    // Then, we iterate over the resulting array of email addresses
    var recipients = line.split( /[:,; \t\v\f\r\n]+/ ) ;
    for ( j = 0 ; j < recipients.length ; ++j )
    {
      var recipient = recipients[j] ;

      if ( recipient != "" )
      {
        if ( recipient.match( /^([A-Za-z0-9_-]+\.)*[A-Za-z0-9_-]+\@([A-Za-z0-9_-]+\.)+[A-Za-z]{2,4}$/ ) )
        {
          ++valid ;
        }
        else
        {
          ++invalid ;
        }
      }
    }

  }

  args.IsValid = ( valid > 0 && invalid == 0 ? true : false ) ;
  return ;
}

1
var email = "[A-Za-z0-9\._%-]+@[A-Za-z0-9\.-]+\.[A-Za-z]{2,4}";
var re = new RegExp('^'+email+'(;\\n*'+email+')*;?$');

[ "john@smith.com;john@smith.com",
  "john@smith.com;john@smith.com;",
  "john@smith.com;\njohn@smith.com;\njjoh@smith.com",
  "john@smith.com jackob@smith.com",
  "jackob@smith.com,",
  "daniels@mail.com\nsmth@mail.com" ].map(function(str){
    return re.test(str);
}); // [true, true, true, false, false, false]

无法验证以下格式。test@test.com;dddd - Vasanth

1

没有理由不使用split - 后端显然也会这样做。

return str.split(/;\s*/).every(function(email) {
    return /.../.test(email);
}

如果你需要优秀或者不是很好的电子邮件正则表达式,请查看 如何使用JavaScript验证电子邮件地址?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接