如何检查字符串是否包含c#中的电子邮件

时间:2013-12-02 16:16:13

标签: c# regex email

在用户输入的文本框中进行电子邮件验证并不难。

但这次我要检查字符串/段落是否包含电子邮件地址

例如。我想检查以下字符串中是否有电子邮件

“你今天好吗,如果你有兴趣,请发送电子邮件至abc@def.com”

请帮忙。

3 个答案:

答案 0 :(得分:6)

以下是您如何实现这一目标:

string para =
    " kjqdshfkjsdfh dskjhskqjdfhk qdhjkdhfj kjhfksjdhf jhjhjhjh@hhhh.com jjhdjfhsfjjd jhjhjhj jkhjhdfjhdjdf@.com ";
var splittedText = para.Split(new char[] {' '});
var mails = splittedText.Where(s => s.Contains("@"));
foreach (var mail in mails)
{
    //here are all your mails  
}

然后使用以下方法验证:

private bool IsEmailValid(string mail)
{
    try
    {                
        MailAddress eMailAddress = new MailAddress(mail);
        return true;
    }
    catch (FormatException)
    {
        return false;  
    }
}

或者只使用以下内容:

public static bool ValidateEmail(string str)
{                       
    return Regex.IsMatch(str, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
}

答案 1 :(得分:3)

首先根据空白分隔符(电子邮件地址通常不包含空格)拆分所有内容:

var tokens = input.Split(" ");

现在您可以验证不同的令牌。最容易的是检查@符号并从那里开始。您可以使用广泛的正则表达式,但您也可以尝试向该地址发送电子邮件,看看它是否有效。它更容易,不需要500个字符的正则表达式。

或者,您可以关注@ Julie的建议并使用MailAddress课程。

正如@Chris正确评论:如果一个包含在引号内的电子邮件地址为valid。由于它是一个非常罕见的边缘例子,我仍然会继续使用这个方法并在代码中添加一个特定的检查来验证引号和空格的组合。

答案 2 :(得分:1)

首先,这是一个glorious post on validating email addresses with regex

其次,这个正则表达式将完成你需要的大量工作:

[a-zA-z0-9\.]+@[a-zA-z0-9\.]+\.[A-Za-z]+

Regular expression visualization

Debuggex Demo

示例文字的结果:

Match 1:    abc@def.com     39      11