2016-04-27 74 views
0

验证电子邮件的多个occurence字符串我有字符串以这种格式来如图所示波纹管:以最有效的方式

"[email protected];[email protected];[email protected];[email protected]" 

什么是最有效的方式来验证每一个上述这些和失败,如果这是不是有效的电子邮件?

+0

http://stackoverflow.com/questions/9809357/regex-for-validating-multiple-e-mail-addresses –

+0

可能重复将它们分割列表,然后用正则表达式验证它们。像这样:'string [] emails =“[email protected]; [email protected]; [email protected]; fault @ mail”.Split(';');'然后,遍历数组并使用正则表达式回答@Manoj写道 – Nino

回答

2

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

List<string> inputMails = "[email protected];[email protected];[email protected];[email protected]".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); 
    } 
} 
+0

'var emails =“[email protected]; [email protected]; set_retret”; VAR验证= emails.Split( ';'),选择(电子邮件=>新的{ \t电子邮件,的IsValid =新EmailAddressAttribute()的IsValid(电子邮件) \t。} ); foreach(var var in validator) { \t Console.WriteLine(var.email +“”+ var.IsValid); }' –

0

您可以使用正则表达式或者你可能会​​3210分割字符串,并尝试为每一个地址创建一个System.Net.Mail.MailAddress实例。如果地址未采用识别的格式,则会发生FormatException

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 = "[email protected];[email protected];[email protected];[email protected]"; 
     var emails = incomingString.Split(';').ToList(); 

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

tnx但我想尽量避免正则表达式 –

0

由于.Net有现成的方法来验证电子邮件ID,我不会用正则表达式,并依靠.NET。例如System.ComponentModel.DataAnnotationsEmailAddressAttribute。 一个干净的方式来使用它会是这样的:

var emailAddressAttribute = new EmailAddressAttribute(); 
var groups = yourEmailsString.Split(new [] { ';' }, StringSplitOptions.RemoveEmptyEntries) 
          .GroupBy(emailAddressAttribute.IsValid); 

这会给你2组,一与Key == true将是有效的电子邮件ID

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

一个与Key == false将无效电子邮件ID

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

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

+0

我想出了'var emails =“[email protected]; [email protected]; set_ +”; var areValid = emails.Split(';')。All(o => new EmailAddressAttribute()。IsValid(o));'但是这肯定远离有效的解决方案 –