正则表达式验证多个电子邮件地址

时间:2018-07-13 15:38:47

标签: c# regex

我已经尝试使用此代码来验证多个电子邮件地址:

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*$"

有帮助吗?

已更新: 我不想拆分字符串以一一验证!这就是为什么我要问堆栈溢出的原因!

3 个答案:

答案 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]);
}

此地址不正确,导致地址字符串无效 good multi address

这些地址可以,并且允许使用字符串 Bad address

答案 2 :(得分:1)

这是我的错,因为第一个电子邮件地址未通过单个电子邮件正则表达式测试,因此多个电子邮件正则表达式测试应该失败。

谢谢。