用于验证以逗号分隔的电子邮件地址的正则表达式

本文关键字:电子邮件地址 正则表达式 分隔 验证 用于 | 更新日期: 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*?)*)*$/