C#验证电子邮件错误

时间:2014-10-23 12:39:37

标签: c# try-catch

我使用此代码验证用户在文本框中输入的电子邮件地址。代码可以工作,但唯一的问题是如果用户键入有效的电子邮件而不是删除它我得到一个错误,说地址参数不能为空。它不会出现错误的catch部分。为什么呢?

   private bool checkMailLL(string mail)
    {
        try
        {
            var test = new MailAddress(mail);
            return true; //valid email
        }
        catch (FormatException ex)
        {
            return false; //invalid email
        }
    }

3 个答案:

答案 0 :(得分:3)

如果地址为空,

The constructor会抛出一个ArgumentException,所以你还必须抓住它:

private bool checkMailLL(string mail)
{
    try
    {
        var test = new MailAddress(mail);
        return true; //valid email
    }
    catch (FormatException)
    {
        return false; //invalid email
    }
    catch (ArgumentException)
    {
        return false; //invalid email
    }
}

或者稍微简单一点,先手动检查它,它也处理可能的ArgumentNullException

private bool checkMailLL(string mail)
{
    if(string.IsNullOrWhiteSpace(mail)) return false;
    try
    {
        var test = new MailAddress(mail);
        return true; //valid email
    }
    catch (FormatException )
    {
        return false; //invalid email
    }
}

答案 1 :(得分:2)

首先检查mail是否为空:

private bool checkMailLL(string mail)
{
    if (string.IsNullOrEmpty(mail))
       return false;    

    try
    {
        var test = new MailAddress(mail);
        return true; //valid email
    }
    catch (FormatException ex)
    {
        return false; //invalid email
    }
}

MailAddress构造函数不允许传入null,并且它会抛出与FormatException不同的异常,这就是未捕获异常的原因。

此外,您可能需要查看此内容,以便更好地验证电子邮件:Best Regular Expression for Email Validation in C#

答案 2 :(得分:1)

private bool checkMailLL(string mail)
    {
        if (String.IsNullOrEmpty(mail)) return false;
        try
        {
            var test = new MailAddress(mail);
            return true; //valid email
        }
        catch (FormatException ex)
        {
            return false; //invalid email
        }
    }