我已经尝试使用此代码来验证多个电子邮件地址:
string email = "kamilar@recruit12.com; test@minh.com; test2@yahoo.com";
REGEX_EMAIL_ADDRESS_MULTI = @"^\s*([a-zA-Z0-9_%+~=$&*!#?\-\'](\.)?)*[a-zA-Z0-9_%+~=$&*!#?\-\']@([a-zA-Z0-9-](\.)?)+[a-zA-Z]{2,6}(\.[a-zA-Z]{2,6})+\s*((,|;)\s*([a-zA-Z0-9_%+~=$&*!#?\-\'](\.)?)*[a-zA-Z0-9_%+~=$&*!#?\-\']@([a-zA-Z0-9-](\.)?)+[a-zA-Z]{2,6}(\.[a-zA-Z]{2,6})+\s*)*$";
Regex reg = new Regex(REGEX_EMAIL_ADDRESS_MULTI);
var isOk = reg.IsMatch(email);
但是不匹配-为什么?
请注意,它与具有以下表达式的单个地址匹配:
@"^\s*([a-zA-Z0-9_%\-\'](\.)?)*[a-zA-Z0-9_%\-\']@([a-zA-Z0-9-](\.)?)+[a-zA-Z]{2,6}(\.[a-zA-Z]{2,6})+\s*$"
有帮助吗?
已更新: 我不想拆分字符串以一一验证!这就是为什么我要问堆栈溢出的原因!
答案 0 :(得分:2)
正如其他人所指出的,您应该一次验证它们。
string email = "kamilar@recruit12.com; test@minh.com; test2@yahoo.com";
string[] emailAddresses = email.Split(';').Select(x=>x.Trim()).ToArray();
string REGEX_EMAIL_ADDRESS_MULTI = @"^\s*([a-zA-Z0-9_%+~=$&*!#?\-\'](\.)?)*[a-zA-Z0-9_%+~=$&*!#?\-\']@([a-zA-Z0-9-](\.)?)+[a-zA-Z]{2,6}(\.[a-zA-Z]{2,6})+\s*((,|;)\s*([a-zA-Z0-9_%+~=$&*!#?\-\'](\.)?)*[a-zA-Z0-9_%+~=$&*!#?\-\']@([a-zA-Z0-9-](\.)?)+[a-zA-Z]{2,6}(\.[a-zA-Z]{2,6})+\s*)*$";
bool isOk = true;
foreach (string emailAddress in emailAddresses)
{
Regex reg = new Regex(REGEX_EMAIL_ADDRESS_MULTI);
if (!reg.IsMatch(email))
{
isOk = false;
break;
}
}
答案 1 :(得分:1)
将字符串分割为';'
string email = "kamilar@recruit12.com; test@minh.com; test2@yahoo.com";
string[] emails = email.Split(';');
然后创建一个返回有效性的方法
private bool CheckAddress(string address){
REGEX_EMAIL_ADDRESS_MULTI = @"^\s*([a-zA-Z0-9_%+~=$&*!#?\-\'](\.)?)*[a-zA-Z0-9_%+~=$&*!#?\-\']@([a-zA-Z0-9-](\.)?)+[a-zA-Z]{2,6}(\.[a-zA-Z]{2,6})+\s*((,|;)\s*([a-zA-Z0-9_%+~=$&*!#?\-\'](\.)?)*[a-zA-Z0-9_%+~=$&*!#?\-\']@([a-zA-Z0-9-](\.)?)+[a-zA-Z]{2,6}(\.[a-zA-Z]{2,6})+\s*)*$";
Regex reg = new Regex(REGEX_EMAIL_ADDRESS_MULTI);
return reg.IsMatch(email);
}
现在只需遍历地址
for(int i = 0; i > emails.Length; i++){
var isOK = CheckAddress(emails[i]);
}
答案 2 :(得分:1)
这是我的错,因为第一个电子邮件地址未通过单个电子邮件正则表达式测试,因此多个电子邮件正则表达式测试应该失败。
谢谢。