user576510
user576510

Reputation: 5905

Regular expression to validate comma separated email addresses?

I need to validate email addresses which can be single or several comma-separated ones.

Before I was using in a regular expression validator an expression like:

string exp = @"((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*";

and it was validating multiple or one single email address.

But same expression is not valdiating in C#? It says valid to invalid addresses as well.

Please correct me or suggest me an expression to validate email addresse(s).

Upvotes: 5

Views: 16379

Answers (6)

Hisham Javed
Hisham Javed

Reputation: 159

Use the following regex, it will resolve your problem. The following regex will entertain post and pre spaces with comma too

/^((([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z\s?]{2,5}){1,25})*(\s*?,\s*?)*)*$/ 

Upvotes: 0

Ankush Madankar
Ankush Madankar

Reputation: 3834

Try this,

    private bool IsValidMultipleEmail1(string value)
    {
        Regex _Regex = new Regex(@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");

        string[] _emails = value.Split(new char[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries);

        foreach (string email in _emails)
        {
            if (!_Regex.IsMatch(email))
                return false;
        }

        return true;
    }

Upvotes: 1

Monday
Monday

Reputation: 1413

try this~

try {
    Regex regexObj = new Regex(@"([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6},?)*", RegexOptions.IgnoreCase | RegexOptions.Multiline);
    if (regexObj.IsMatch(subjectString)) {
        // Successful match
    } else {
        // Match attempt failed
    } 
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}

Upvotes: 1

Tim Pietzcker
Tim Pietzcker

Reputation: 336198

Without knowing how you're doing the validation, it's hard to tell why C# is validating some strings that the validator had rejected. Most probably it's because the validator is looking at the entire string, and you're using Regex.IsMatch() in C# which would also accept the match if a substring matches. To work around that, add \A to the start and \Z to the end of your regex. In your case, the entire regex is optional (enclosed by (...)*) so it also matches the empty string - do you want to allow that?

Then again, you might want to reconsider the regex approach entirely - no sane regex can validate e-mail addresses correctly (and you'll still pass addresses that just look valid but don't have an actual account associated with them).

Upvotes: 4

stema
stema

Reputation: 92996

Please give more details. Which addresses are matched as valid, but should be invalid? How do you call the regex (your c# code)?

A point I see is that you are missing anchors.

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

^ matches the start of the string

$ matches the end of the string

If you don't use them your pattern will match as soon as it found a valid sub string.

Upvotes: 19

K6t
K6t

Reputation: 1845

i dont know C# i can give an idea split by ',' and validate each seperator..... its simple

Upvotes: 4

Related Questions