我需要验证可以是单个或多个以逗号分隔的电子邮件地址。
在我在正则表达式验证器中使用之前,表达式如下:
string exp = @"((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*";
它正在验证多个或一个电子邮件地址。
但同样的表达方式在C#中并不具有价值?它表示对无效地址有效。
请更正我或建议我验证电子邮件收件人的表达。
答案 0 :(得分:16)
请提供更多详情。哪些地址匹配为有效,但应无效?你如何调用正则表达式(你的c#代码)?
我看到的一点是你缺少锚点。
^((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$
^
匹配字符串的开头
$
匹配字符串
如果您不使用它们,您的模式会在找到有效的子字符串后立即匹配。
答案 1 :(得分:4)
我不知道C#我可以提出一个想法
按','
分割,验证每个分隔符 .....简单
答案 2 :(得分:4)
在不知道你是如何进行验证的情况下,很难说为什么C#正在验证验证器拒绝的某些字符串。很可能是因为验证器正在查看整个字符串,而您在C#中使用Regex.IsMatch()
,如果substring
匹配,它也会接受匹配。要解决此问题,请在开始时添加\A
,在正则表达式结尾添加\Z
。在你的情况下,整个正则表达式是可选的(由(...)*
括起来)所以它也匹配空字符串 - 你想允许吗?
然后,您可能想要完全重新考虑正则表达式方法 - 没有理智的正则表达式可以正确验证电子邮件地址(并且您仍然会传递看起来有效但没有的地址与他们相关的实际帐户)。
答案 3 :(得分:1)
试试这个〜
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
}
答案 4 :(得分:1)
试试这个,
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;
}
答案 5 :(得分:0)
使用以下正则表达式,它将解决您的问题。以下正则表达式将使用逗号来接收帖子和前置空格
/ ^((([A-ZA-Z0-9 _-。] +)@([A-ZA-Z0-9 _-。] +)。([A-ZA-Z \ S?] {2- ,5}){1,25})(\ s ?,\ s *?)) $ /