【问题标题】:How do I ensure that the user entered an email address in a textbox?如何确保用户在文本框中输入了电子邮件地址?
【发布时间】:2014-04-06 12:02:44
【问题描述】:

如何确保我的 Web 表单应用程序的用户输入了电子邮件地址?我已经看到使用正则表达式和 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 或类似的东西,它仍然返回 true:

 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; 
 }

【问题讨论】:

  • 我不知道为什么我在这里被否决了。我已经完成了研究,正如我上面所说,我已经看到了与使用正则表达式和 Emailaddress() 验证有关的问题和答案,但我不明白如何在我的代码中实现它。如果您因缺乏研究而投票反对我,我将不胜感激您建议存在的答案的链接。非常感谢!
  • searching 没有消息?
  • stackoverflow.com/questions/5342375/… 这正是您所需要的。
  • 谢谢先生!我想我想出了如何在我的代码中实现 MailAddress()!
  • 是的 crashmstr,我做了很多搜索,但我再次不确定如何在我的代码中实现 MailAddress()。谢谢大家的帮助。我是编程新手。

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


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!我想我知道如何在我的代码中实现这一点。
  • 您能提出我的问题吗?再次感谢您!
  • 我试过这个: if (emailTextBox.Text == "" || emailTextBox.Text.Length > 100 || IsValid(emailTextBox.Text).Equals(false)) { emailErrorString = "Email:请输入有效的电子邮件地址。不超过 100 个字符。\n\n";电子邮件字符串 = 空;错误消息=真; } else { emailString = emailTextBox.Text;电子邮件错误字符串 = 空;当我输入像 jj@jj 这样的无效电子邮件地址时,它返回 true
【解决方案2】:

我尝试使用 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;
            }

【讨论】:

  • "jj@jj" 实际上一个有效的电子邮件地址,没有 TLD 的电子邮件地址很少使用但仍然有效。如果“jj”是尝试发送邮件的电子邮件服务器已知的主机,它会将消息传递到在主机“jj”上运行的电子邮件服务器。由于缺少 TLD 通常是自定义主机配置的标志,因此对于大多数面向外部的应用程序支持它并不有趣,但在公司的 Intranet 上这可能很有用。
【解决方案3】:

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

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时抛出异常的代码我没有添加,但是你可以随时添加。

希望这会有所帮助! :)

【讨论】:

  • 我认为您无法检查有效的顶级域。现在有太多太多了。或者是一个有效的域。几乎通用的语法是你唯一能做的。
  • 感谢您的回答!我不太关心它是否来自任何特定域,或者地址是否存在,只是它的格式正确。这可以解决问题,但是我知道使用 MailAddress() 类可以使用更短的方法,如下所示:stackoverflow.com/questions/21123829/…。我只是不确定如何在我的代码/if then 语句中实现它。
  • 另外,如果有人提出我的问题,我将不胜感激。开车后我的名声下降了。
【解决方案4】:

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

【讨论】:

  • 谢谢!你能提出我的问题吗?
  • 我试过这个: if (emailTextBox.Text == "" || emailTextBox.Text.Length > 100 || IsValid(emailTextBox.Text).Equals(false)) { emailErrorString = "Email:请输入有效的电子邮件地址。不超过 100 个字符。\n\n";电子邮件字符串 = 空;错误消息=真; } else { emailString = emailTextBox.Text;电子邮件错误字符串 = 空;当我输入像 jj@jj 这样的无效电子邮件地址时,它返回 true
猜你喜欢
  • 2023-04-03
  • 2012-06-21
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
相关资源
最近更新 更多