4

After a quick research on the Stackoverflow, I wasn't able to find any solution for the multiple email validation using regex (split JS function is not applicable, but some reason back-end of the application waits for a string with emails separated by ;).

Here are the requirements:

  1. Emails should be validated using the following rule: [A-Za-z0-9\._%-]+@[A-Za-z0-9\.-]+\.[A-Za-z]{2,4}
  2. Regex should accept ; sign as a separator
  3. Emails can be written on multiple lines, finishing with ;
  4. Regex may accept the end of the line as ;

I come up with this solution:

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

but it doesn't work for point #3-4

So here are cases that are OK:

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

Here are cases that are definetely NOT OK:

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

All sort of help will be appreciated

8
  • 2
    why is split not viable? Commented Mar 20, 2012 at 3:21
  • stackoverflow.com/questions/1732348/… Commented Mar 20, 2012 at 3:25
  • Why is 3. not OK? According to rule 4, the regex may accept end of line as ; and the two emails are separated by an end of line? Commented Mar 20, 2012 at 3:27
  • (Also, could you split, validate, and then join back together to pass to the "back-end of the application"?) Commented Mar 20, 2012 at 3:46
  • So here is the short story: For a change on JavaScript code I have to write long reports that will take 3-4 days for approval, why did I change code that 'is no my scope' Commented Mar 20, 2012 at 4:02

3 Answers 3

2

This is how I'm doing it (ASP.Net app, no jQuery). The list of email addresses is entered in a multi-line text box:

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 ;
}
Sign up to request clarification or add additional context in comments.

Comments

1
var email = "[A-Za-z0-9\._%-]+@[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]

1 Comment

Not able to validate the following format. [email protected];dddd
1

There is no reason not to use split - in the same way the backend will obviously do.

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

For good or not-so-good email regular expressions have a look at Validate email address in JavaScript?.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.