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+)开发者_如何学JAVA*@\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).
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.
i dont know C# i can give an idea
split by ','
and validate each seperator..... its simple
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).
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
}
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;
}
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*?)*)*$/
精彩评论