Reputation: 5905
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
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
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
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
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
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
Reputation: 1845
i dont know C# i can give an idea
split by ','
and validate each seperator..... its simple
Upvotes: 4