我创建了一个电子邮件列表,该列表用分号分隔,以便安全处理。
但是查看日志时,用户在每封电子邮件后输入逗号","字符,这导致了An invalid character was found in the mail header: ','
错误。
我确实查看了有关从列表中删除字符的其他答案,并使用 Linq 尝试了以下内容:
//Remove any invalid commas from the recipients list
recipients = string.Join(" ", recipients .Split().Where(w => !recipients.Contains(",")));
但是编译器告诉我,List<string>
不包含当前上下文中不存在.Split()
的定义。删除逗号后,处理后的列表仍由";"分号分隔,这一点很重要。
问题:
如何从分号分隔的列表中删除逗号字符?
法典:
List<string> recipients = new List<string>();
//Split the additional email string to List<string>
// (check that the string isn't empty before splitting)
if(string.IsNullOrEmpty(adContacts.AdditionalEmails) != true)
{ recipients = adContacts.AdditionalEmails.Split(';').ToList(); }
//Remove any invalid commas from the recipients list
recipients = string.Join(" ", text.Split().Where(w => !recipients.Contains(",")));
这取决于删除所有逗号是什么意思。要删除整个text
中的逗号:
text = text.Replace(",", "");
在您的情况下,它将是
recipients = adContacts.AdditionalEmails
.Replace(",", "")
.Split(';')
.ToList(); // <- do you really want to convert array into a list?
将逗号转换为分号
text = text.Replace(',', ';');
要删除所有包含逗号的电子邮件,请执行以下操作:
recipients = string.Join(";", text
.Split(';')
.Where(w => !w.Contains(",")));
最后,您可以将逗号视为有效的分隔符和分号:
var eMails = text.Split(new char[] {';', ','}, StringSplitOptions.RemoveEmptyEntries);
您可能希望将所有逗号替换为分号:
recipients=recipients.Replace(",",";");
我会用正则表达式分开:
Regex.Split(input, @"[,;]+").Where(s => !string.IsNullOrWhiteSpace(s))
您可以尝试此方法:
List<string> newRecipients = recipients
.Select(r => String.Join(";", r.Split(',', ';')))
.ToList();
这将用可能的逗号和分号分隔符分隔每个收件人。然后,它将通过使用正确的分号加入它们来构建新的收件人。
编译器错误是因为收件人是列表而不是字符串,并且列表没有拆分方法。
因此,请使用 List.RemoveAll 方法:
// Remove any invalid commas from the recipients list.
recipients = string.Join(" ", recipients.RemoveAll(item => item.Contains(",")));