验证电子邮件的多个occurence字符串我有字符串以这种格式来如图所示波纹管:以最有效的方式
"[email protected];[email protected];[email protected];[email protected]"
什么是最有效的方式来验证每一个上述这些和失败,如果这是不是有效的电子邮件?
验证电子邮件的多个occurence字符串我有字符串以这种格式来如图所示波纹管:以最有效的方式
"[email protected];[email protected];[email protected];[email protected]"
什么是最有效的方式来验证每一个上述这些和失败,如果这是不是有效的电子邮件?
您可以使用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);
}
}
'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); }' –
您可以使用正则表达式或者你可能会3210分割字符串,并尝试为每一个地址创建一个System.Net.Mail.MailAddress
实例。如果地址未采用识别的格式,则会发生FormatException
。
如果您确定,所有电子邮件都是用分号分隔的,您可以将其拆分并制作一份清单。验证每封电子邮件的最佳方式是使用正则表达式模式。我用这一个:
var emailPattern = @"(?=^.{1,64}@)^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?=.{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!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?=.{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
}
}
tnx但我想尽量避免正则表达式 –
由于.Net有现成的方法来验证电子邮件ID,我不会用正则表达式,并依靠.NET。例如System.ComponentModel.DataAnnotations
的EmailAddressAttribute
。 一个干净的方式来使用它会是这样的:
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循环,根据您的需要..
我想出了'var emails =“[email protected]; [email protected]; set_ +”; var areValid = emails.Split(';')。All(o => new EmailAddressAttribute()。IsValid(o));'但是这肯定远离有效的解决方案 –
http://stackoverflow.com/questions/9809357/regex-for-validating-multiple-e-mail-addresses –
可能重复将它们分割列表,然后用正则表达式验证它们。像这样:'string [] emails =“[email protected]; [email protected]; [email protected]; fault @ mail”.Split(';');'然后,遍历数组并使用正则表达式回答@Manoj写道 – Nino