如何确保用户在文本框中输入了电子邮件地址?

时间:2014-03-04 19:04:21

标签: c# wpf if-statement textbox email-validation

如何确保我的网络表单应用程序的用户输入了电子邮件地址?我已经看过使用正则表达式和EmailAddress()的示例,但是如何在下面的if else语句中实现一个或另一个?

if (emailTextBox.Text == "" || emailTextBox.Text.Length > 100)
{
    emailErrorString = "Email: Enter email address.  No more than 100 characters.\n\n";
    emailString = null;
    errorMessage = true;
}
else
{
    emailString = emailTextBox.Text;
    emailErrorString = null;
}

我尝试了下面的代码,即使我输入了一个无效的电子邮件地址“jj @jj。我没有输入”.com,或者net,或类似的东西,它也回来了:

 if (emailTextBox.Text == "" || emailTextBox.Text.Length > 100 ||                                          
      IsValid(emailTextBox.Text).Equals(false)) 
 {
     emailErrorString = "Email: Enter a valid email address. No more than 100
           characters.\n\n"; emailString = null; errorMessage = true; 
 } 
 else 
 { 
      emailString = emailTextBox.Text; emailErrorString = null; 
 }

4 个答案:

答案 0 :(得分:3)

您可以使用MailAddress课程,如下所示:

public bool IsValid(string emailAddress)
{
    try
    {
        MailAddress m = new MailAddress(emailaddress);
        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

可替换地, 您可以使用RegEx(您应该能够找到一个适合验证电子邮件地址)。 此链接提供了可用字符/模式的基本概念:Regexlib

答案 1 :(得分:1)

我尝试使用MailAddress()示例,“jj @ jj”作为有效的电子邮件返回。所以,我尝试了以下内容并且完美地运行了:

 ///Create a Regular Expression
 Regex regEmail = new Regex(@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?
      \^_`{|}~]+)*"
        + "@" 
        + @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$");

 ///test the email textbox against the created Regular Expression
 if (emailTextBox.Text == "" || emailTextBox.Text.Length > 100 || 
                !regEmail.IsMatch(emailTextBox.Text))
            {
                emailErrorString = "Email: Enter a valid email address.  No more than
                     100 characters.\n\n";
                emailString = null;
                errorMessage = true;
            }
            else
            {
                emailString = emailTextBox.Text;
                emailErrorString = null;
            }

答案 2 :(得分:0)

好吧,如果它可以是任何类型的电子邮件地址,并且代码不必检查它是否有效,您可以使用此代码,该代码基于此结构:

example@domain.extension

唯一要检查字符串是否包含@字符,a。字符,以及有效的电子邮件域和扩展名(com / de / org /...).

public bool CheckAdress(string Adress)
{
    if (Adress.IndexOf('@') == -1)//if there are no @ characters in the Adress
    {
        return false;
    }
    switch (Adress.Substring(Adress.IndexOf('@') + 1, Adress.IndexOf('.') - Adress.IndexOf('@') + 1)//examines the domain between the @ and the. characters
    {
        case "gmail":
        case "freemail":
        case "citromail":
        //... (any valid domain name)
        break;
        default:
        return false;
    }
    switch (Adress.Substring(Adress.IndexOf('.') + 1, Adress.Length - Adress.IndexOf('.') + 1))//finally examines the extension
    {
        case "com":
        case "de":
        case "org":
        //... (any valid extension)
        break;
        default:
        return false;
    }

    //if all of these have not returned false, the adress might be valid, so
    return true;
}

此代码仅在TextBox中没有其他内容时才有效,只有相关的地址。 我知道这有点长,也许不是最完美的答案。但是这样您就可以自定义代码接受哪些域和扩展,哪些不是。

但是如果你想检查这个电子邮件地址是否存在,我认为这个解决方案不起作用。

当长度超过100时,我没有添加抛出异常的代码,但你可以随时添加它。

希望这有点帮助! :)

答案 3 :(得分:0)

尝试创建一个新的System.Net.Mail.MailAddress对象。将用于用户输入的TextBox的Text属性作为此构造函数的参数传递。将其包装在Try Catch块中。如果地址无效,您将获得FormatException。