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

C# 以最有效的方式验证字符串中多次出现的电子邮件,c#,validation,C#,Validation,我有如下格式的字符串: "mark345345@test.com;rtereter@something.com;terst@gmail.com;fault@mail" 验证上述各项的最有效方法是什么?如果它们不是有效的电子邮件,则会失败?您可以使用System.ComponentModel.DataAnnotations的类来验证电子邮件地址。在此之前,您需要将单个邮件拆分,并检查其是否有效。下面的代码将帮助您分别收集有效邮件和无效邮件 List<string> inputMail

我有如下格式的字符串:

"mark345345@test.com;rtereter@something.com;terst@gmail.com;fault@mail"
验证上述各项的最有效方法是什么?如果它们不是有效的电子邮件,则会失败?

您可以使用
System.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);
    }
}
列出输入邮件=”mark345345@test.com;rtereter@something.com;terst@gmail.com;fault@mail“.Split(“;”).ToList();
List validMails=新列表();
List inValidMails=新列表();
var validator=新的EmailAddressAttribute();
foreach(输入邮件中的var邮件)
{
if(validator.IsValid(邮件))
{
validMails.Add(邮件);
}
其他的
{
无效邮件。添加(邮件);
}
}
您可以使用
System.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);
    }
}
列出输入邮件=”mark345345@test.com;rtereter@something.com;terst@gmail.com;fault@mail“.Split(“;”).ToList();
List validMails=新列表();
List inValidMails=新列表();
var validator=新的EmailAddressAttribute();
foreach(输入邮件中的var邮件)
{
if(validator.IsValid(邮件))
{
validMails.Add(邮件);
}
其他的
{
无效邮件。添加(邮件);
}
}

您可以使用正则表达式,也可以将字符串拆分为
';'
并尝试为每个地址创建一个
System.Net.Mail.MailAddress
实例<如果地址的格式不可识别,则会发生代码>格式异常。

您可以使用正则表达式,也可以将字符串拆分为“
”;”
并尝试为每个地址创建一个
System.Net.Mail.MailAddress
实例<如果地址的格式不可识别,则会发生代码>格式异常。

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

        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
            }
        }

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

        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
            }
        }

由于.Net有现成的方法来验证电子邮件id,所以我不会使用正则表达式而依赖.Net。e、 g来自
System.ComponentModel.DataAnnotations
EmailAddressAttribute
。 一种干净的使用方法是:

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

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

var validEmailIds = groups.Where(group => group.Key)
                        .SelectMany(group => group);
var invalidEmailIds = groups.Where(group => !group.Key)
                        .SelectMany(group => group);

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

因为.Net有现成的方法来验证电子邮件id,所以我不会使用正则表达式,而依赖.Net。e、 g来自
System.ComponentModel.DataAnnotations
EmailAddressAttribute
。 一种干净的使用方法是:

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

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

var validEmailIds = groups.Where(group => group.Key)
                        .SelectMany(group => group);
var invalidEmailIds = groups.Where(group => !group.Key)
                        .SelectMany(group => group);

您还可以根据需要在分组后运行for循环。

可能重复的将它们拆分为列表,然后使用regex验证它们。如下所示:
string[]电子邮件=”mark345345@test.com;rtereter@something.com;terst@gmail.com;fault@mail“.Split(“;”)然后,通过数组迭代并使用正则表达式来回答@Manoj将可能重复的拆分结果列出来,然后用正则表达式验证它们。如下所示:
string[]电子邮件=”mark345345@test.com;rtereter@something.com;terst@gmail.com;fault@mail“.Split(“;”)然后,通过数组进行迭代,并在@manojwrotei给出的答案中使用正则表达式,
var emails=”test@gmail.com;testghj@feet.u;设置“+”;var areValid=emails.Split(“;”).All(o=>newemailAddressAttribute().IsValid(o))但这肯定远远不是有效的解决方案,我提出了
var电子邮件=”test@gmail.com;testghj@feet.u;设置“+”;var areValid=emails.Split(“;”).All(o=>newemailAddressAttribute().IsValid(o))但这肯定远远不是有效的解决方案
var电子邮件=”test@gmail.com;testghj@feet.u“设置_ret”;var validator=emails.Split(“;”).Select(email=>new{email,IsValid=newemailaddressattribute().IsValid(email)});foreach(验证程序中的var){Console.WriteLine(var.email+“”+var.IsValid);}
var-emails=”test@gmail.com;testghj@feet.u“设置_ret”;var validator=emails.Split(“;”).Select(email=>new{email,IsValid=newemailaddressattribute().IsValid(email)});foreach(validator中的var){Console.WriteLine(var.email+“”+var.IsValid);}
tnx但是如果可能的话我试图避免正则表达式