用于验证以逗号分隔的电子邮件地址的正则表达式
本文关键字:电子邮件地址 正则表达式 分隔 验证 用于 | 更新日期: 2023-09-27 18:04:08
我需要验证可以是单个或多个逗号分隔的电子邮件地址。
之前,我在正则表达式验证器中使用了如下表达式:
string exp = @"(('w+([-+.']'w+)*@'w+([-.]'w+)*'.'w+([-.]'w+)*)*([,])*)*";
正在验证多个或单个电子邮件地址。
但是相同的表达式在c#中不验证吗?
请纠正我或建议我一个表达式来验证电子邮件地址
请详细说明。哪些地址匹配为有效,但应该是无效的?你如何调用正则表达式(你的c#代码)?
我看到的一点是你缺少锚。
^(('w+([-+.']'w+)*@'w+([-.]'w+)*'.'w+([-.]'w+)*)*([,])*)*$
^
匹配字符串
$
匹配字符串
如果你不使用它们,你的模式将匹配只要它找到一个有效的子字符串
我不懂c#,我可以给出一个想法通过','
和分割验证每个分隔符.....其简单的
在不知道如何进行验证的情况下,很难判断为什么c#要验证验证器拒绝的某些字符串。最有可能是因为验证器正在查看整个字符串,并且您在c#中使用Regex.IsMatch()
,如果substring
匹配,它也会接受匹配。为了解决这个问题,将'A
添加到regex的开始,并将'Z
添加到regex的末尾。在你的情况下,整个regex是可选的(由(...)*
包围),所以它也匹配空字符串-你想允许吗?
然后,您可能需要完全重新考虑regex方法—没有相同的regex可以正确地验证电子邮件地址(并且您仍然会传递看起来有效但没有实际帐户与之关联的地址)。
试试这个~
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;
}
使用下面的正则表达式,它将解决您的问题。下面的正则表达式将使用post和pre空格
/^((([a-zA-Z0-9_'-'.]+)@([a-zA-Z0-9_'-'.]+)'.([a-zA-Z's?]{2,5}){1,25})*('s*?,'s*?)*)*$/