如何确保我的网络表单应用程序的用户输入了电子邮件地址?我已经看过使用正则表达式和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;
}
答案 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。