我需要验证电子邮件地址,可以是单个或多个逗号分隔的地址。
之前我在正则表达式验证器中使用了这样一个表达式:
string exp = @"((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*";
它可以验证多个或单个电子邮件地址。
但是在C#中,相同的表达式不能进行验证?它也会将有效的和无效的地址都认为是有效的。
请纠正我或建议一个验证电子邮件地址的表达式。
请提供更多细节。哪些地址被匹配为有效,但实际上应该是无效的?您如何调用正则表达式(您的c#代码)?
我发现一个问题是您缺少锚点。
^((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$
^
匹配字符串的开头。
$
匹配字符串的结尾。
如果您不使用它们,则您的模式将在找到有效子字符串时立即匹配。
我不会C#,但我可以提供一个想法:按照','
进行分割,验证每个分隔符...... 这很简单。
Regex.IsMatch()
,如果子字符串
匹配,它也会接受匹配。为了解决这个问题,在你的正则表达式开头添加\A
,在结尾添加\Z
。在你的情况下,整个正则表达式是可选的(由(...)*
括起来),所以它也匹配空字符串 - 你想允许这样吗?试试这个~
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
}
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;
}
/^((([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z\s?]{2,5}){1,25})*(\s*?,\s*?)*)*$/