Come validationre più email utilizzando Regex?

Dopo una rapida ricerca sullo Stackoverflow, non sono riuscito a trovare una soluzione per la validation di posta multipla usando regex (la function di divisione JS non è applicabile, ma un po 'indietro dell'applicazione attende una string con e-mail separate da ; ).

Ecco i requisiti:

  1. Le e-mail devono essere validationte usando la seguente regola: [A-Za-z0-9\._%-][email protected][A-Za-z0-9\.-]+\.[A-Za-z]{2,4}
  2. Regex dovrebbe accettare ; segno come separatore
  3. Le email possono essere scritte su più righe, finendo con ;
  4. Regex può accettare la fine della linea come ;

Mi presento questa soluzione:

 .? ^ [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}) *

ma non funziona per il punto # 3-4

Quindi qui ci sono casi che sono OK:

      1. [email protected]; [email protected]
      2. [email protected]; [email protected];
      3. [email protected];
         [email protected];
         [email protected];
    

    Ecco alcuni casi che sono sicuramente NON OK:

       1. [email protected] [email protected]
       2. [email protected],
       3. [email protected]
          [email protected]
    

    Tutto il tipo di aiuto sarà apprezzato

     var email = "[A-Za-z0-9\._%-][email protected][A-Za-z0-9\.-]+\.[A-Za-z]{2,4}"; var re = new RegExp('^'+email+'(;\\n*'+email+')*;?$'); [ "[email protected];[email protected]", "[email protected];[email protected];", "[email protected];\[email protected];\[email protected]", "[email protected] [email protected]", "[email protected],", "[email protected]\[email protected]" ].map(function(str){ return re.test(str); }); // [true, true, true, false, false, false] 

    Questo è come sto facendo (applicazione ASP.Net, non jQuery). L'elenco degli indirizzi e-mail è inserito in una casella di text multi-line:

     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 arrays of lines var lines = recipientlist.split( /[\r\n]+/ ) ; for ( i = 0 ; i < lines.length ; ++i ) { var line = lines[i] ; // pull the line from the arrays // Split each line on a sequence of 1 or more whitespace, colon, semicolon or comma characters. // Then, we iterate over the resulting arrays 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 ; } 

    Non c'è motivo di non utilizzare la divisione – nello stesso modo che il backend ovviamente farà.

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

    Per le buone e non-buone e-mail le espressioni regolari hanno uno sguardo a Validate l'indirizzo email in JavaScript? .