有没有办法在wpf C#中为电子邮件地址制作文本框输入验证?使用正则表达式或验证表达式或任何可以帮助的东西,最好附带代码示例和一些说明。
在text_changed事件中,您可以将文本框的值传递到辅助类中。
public static class ValidatorExtensions
{
public static bool IsValidEmailAddress(this string s)
{
Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
return regex.IsMatch(s);
}
}
现在在文本更改事件中,您可以测试输入
private void myTextBox_TextChanged(object sender, EventArgs e)
{
bool result = ValidatorExtensions.IsValidEmailAddress( myTextBox.Text );
}
检查电子邮件地址是否有效有几种方法。
关于System.Net.Mail.MailAddress类
关于正则表达式
static void Main(string[] args)
{
var validMail = "validMail@gmail.com";
var invalidMail = "123";
Console.WriteLine("IsValidMailAddress1 Test");
Console.WriteLine(string.Format("Mail Address : {0} . is valid : {1}", validMail, IsValidMailAddress1(validMail)));
Console.WriteLine(string.Format("Mail Address : {0} . is valid : {1}", invalidMail, IsValidMailAddress1(invalidMail)));
Console.WriteLine("IsValidMailAddress2 Test");
Console.WriteLine(string.Format("Mail Address : {0} . is valid : {1}", validMail, IsValidMailAddress2(validMail)));
Console.WriteLine(string.Format("Mail Address : {0} . is valid : {1}", invalidMail, IsValidMailAddress2(invalidMail)));
}
static bool IsValidMailAddress1(string mail)
{
try
{
System.Net.Mail.MailAddress mailAddress = new System.Net.Mail.MailAddress(mail);
return true;
}
catch
{
return false;
}
}
static bool IsValidMailAddress2(string mailAddress)
{
return Regex.IsMatch(mailAddress, @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
}
实际上,在验证电子邮件地址时需要考虑许多事情:
几乎所有在互联网上找到的正则表达式都不是100%正确的
即使正则表达式完美无缺,像Outlook或Exchange这样的电子邮件客户端或服务器可能不接受奇异但有效的电子邮件地址。
以下是一个奇怪但有效的电子邮件地址的例子:
"very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com
这是类型:
John.Doe@example.com
John Doe<John.Doe@example.com>
这是我找到的最好的一个:
Regex.IsMatch(emailAddress, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase)