以最有效的方式验证字符串中多次出现的电子邮件

时间:2016-04-27 10:22:35

标签: c# validation

我有这种格式的字符串,如下所示:

"mark345345@test.com;rtereter@something.com;terst@gmail.com;fault@mail"

如果它是无效的电子邮件,那么验证上述每种方法的最有效方法是什么?失败?

4 个答案:

答案 0 :(得分:2)

您可以使用EmailAddressAttributeSystem.ComponentModel.DataAnnotations命名空间来验证电子邮件地址。在此之前,您需要拆分单个邮件并检查它是否有效。以下代码将帮助您分别收集有效邮件和无效邮件。

List<string> inputMails = "mark345345@test.com;rtereter@something.com;terst@gmail.com;fault@mail".Split(';').ToList();
List<string> validMails = new List<string>();
List<string> inValidMails = new List<string>();
var validator = new EmailAddressAttribute();
foreach (var mail in inputMails)
{
    if (validator.IsValid(mail))
    {
        validMails.Add(mail);
    }

    else
    {
        inValidMails.Add(mail);
    }
}

答案 1 :(得分:0)

您可以使用Regex,也可以将字符串拆分为';',并尝试为每个地址创建一个System.Net.Mail.MailAddress实例。如果地址不是可识别的格式,则会发生FormatException

答案 2 :(得分:0)

如果您确定所有电子邮件都是半冒号分隔的,您可以将其拆分并列出所有电子邮件。验证每封电子邮件的最佳方法是使用正则表达式模式。我用过这个:

        var emailPattern = @"(?=^.{1,64}@)^[a-zA-Z0-9!#$%&amp;'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&amp;'*+/=?^_`{|}~-]+)*@(?=.{1,255}$|.{1,255};)(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])(;(?=.{1,64}@)[a-zA-Z0-9!#$%&amp;'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&amp;'*+/=?^_`{|}~-]+)*@(?=.{1,255}$|.{1,255};)(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9]))*$";
        var incomingString = "mark345345@test.com;rtereter@something.com;terst@gmail.com;fault@mail";
        var emails = incomingString.Split(';').ToList();

        foreach (var email in emails)
        {
            if (new Regex(emailPattern).IsMatch(email))
            {
                // your logic here
            }
        }

答案 3 :(得分:0)

由于.Net具有验证电子邮件ID的开箱即用方式,因此我不会使用正则表达式并依赖.Net。例如来自EmailAddressAttribute的{​​{1}}。 一个干净的方式来使用它将是这样的:

System.ComponentModel.DataAnnotations

这将为您提供2个组,var emailAddressAttribute = new EmailAddressAttribute(); var groups = yourEmailsString.Split(new [] { ';' }, StringSplitOptions.RemoveEmptyEntries) .GroupBy(emailAddressAttribute.IsValid); 的组将是有效的电子邮件ID

Key == true

var validEmailIds = groups.Where(group => group.Key) .SelectMany(group => group); 的邮件将是无效的电子邮件ID

Key == false

根据您的需要,您也可以在分组后运行for循环..