Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Regex验证多封电子邮件?_Javascript_Regex_Email Validation - Fatal编程技术网

Javascript 如何使用Regex验证多封电子邮件?

Javascript 如何使用Regex验证多封电子邮件?,javascript,regex,email-validation,Javascript,Regex,Email Validation,在对Stackoverflow进行了快速研究之后,我无法找到任何使用regex进行多邮件验证的解决方案(split JS函数不适用,但出于某种原因,应用程序的后端会等待电子邮件以;分隔的字符串) 以下是要求: 应使用以下规则验证电子邮件:[A-Za-z0-9\.\uz%-]+@[A-Za-z0-9\.-]+\.[A-Za-z]{2,4} Regex应该接受符号作为分隔符 电子邮件可以写在多行上,以结尾 正则表达式可以接受行尾为 我提出了这个解决方案: ^[A-Za-z0-9\._%-]+@[A-

在对Stackoverflow进行了快速研究之后,我无法找到任何使用regex进行多邮件验证的解决方案(split JS函数不适用,但出于某种原因,应用程序的后端会等待电子邮件以
分隔的字符串)

以下是要求:

  • 应使用以下规则验证电子邮件:
    [A-Za-z0-9\.\uz%-]+@[A-Za-z0-9\.-]+\.[A-Za-z]{2,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}?)* ^[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;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 1.john@smith.com jackob@smith.com 2.jackob@smith.com, 3.daniels@mail.com smth@mail.com
    感谢您提供的所有帮助

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

    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]
    
    return str.split(/;\s*/).every(function(email) {
        return /.../.test(email);
    }
    
    看看电子邮件正则表达式的好坏。

    我就是这样做的(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 ;
    }
    
    函数ValidateRecipientEmailList(源,参数)
    {
    var rlTextBox=$get(“”);
    var recipientlist=rlTextBox.value;
    var valid=0;
    var无效=0;
    //将收件人列表分成几行。为了与CLR常规i/o保持一致,我们将接受任何CR和LF字符序列作为行尾标记。
    //然后我们迭代得到的线数组
    var lines=recipientlist.split(/[\r\n]+/);
    对于(i=0;i0&&invalid==0?true:false);
    返回;
    }
    
    为什么拆分不可行?为什么是3。不行吗?根据规则4,正则表达式可以接受行尾为
    和两封电子邮件以行尾分隔(另外,您可以拆分、验证,然后连接到一起传递到“应用程序的后端”吗?),下面是一个简短的故事:对于JavaScript代码的更改,我必须编写长报告,需要3-4天的批准时间,为什么我更改了“不属于我的范围”的代码,而无法验证以下格式。test@test.com;dddd