电子邮件地址输入验证
Email address input validation
有没有办法在 wpf C# 中对电子邮件地址进行文本框输入验证?正则表达式或验证表达式或任何可以提供帮助的东西,最好是代码示例和一些说明
在 text_changed 事件中,您可以将文本框的值传递给助手 class。
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 );
}
有几种方法可以检查电子邮件地址是否有效
About System.Net.Mail.MailAddress
About 正则表达式
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})+)$");
}
这是我找到的最好的:
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)
实际上,验证电子邮件地址时必须考虑很多事情:
网上找到的Regex表达式几乎都不是100%
正确
即使正则表达式做得 100% 完美,电子邮件客户端也喜欢
Outlook 或电子邮件服务器(如 Exchange)可能不接受异国情调的,
但电子邮件地址有效。
只是一个奇怪但有效的电子邮件地址的例子:
"very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com
属于以下类型:
John.Doe@example.com
但实际上,RFC 5322:Internet 消息格式:地址规范指定电子邮件地址如下所示:
John Doe<John.Doe@example.com>
第一个"John Doe"是显示名称。
如果添加显示名称验证,它会变得相当复杂。但即使没有显示名称,大多数正则表达式也无法将以下电子邮件地址识别为有效地址:
"John@Doe"@example.com
因此,建议只是在电子邮件地址看起来很奇怪时警告用户,但让用户决定他是否打错了字或他是否真的想输入该电子邮件地址。
除了验证之外,当用户只能键入合法字符时可能会有所帮助。
阅读我的文章 CodeProject: Email Address Validation Explained,它附带了一个完全实现和测试的 WPF 电子邮件文本框的代码。
有没有办法在 wpf C# 中对电子邮件地址进行文本框输入验证?正则表达式或验证表达式或任何可以提供帮助的东西,最好是代码示例和一些说明
在 text_changed 事件中,您可以将文本框的值传递给助手 class。
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 );
}
有几种方法可以检查电子邮件地址是否有效
About System.Net.Mail.MailAddress
About 正则表达式
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})+)$");
}
这是我找到的最好的:
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)
实际上,验证电子邮件地址时必须考虑很多事情:
网上找到的Regex表达式几乎都不是100% 正确
即使正则表达式做得 100% 完美,电子邮件客户端也喜欢 Outlook 或电子邮件服务器(如 Exchange)可能不接受异国情调的, 但电子邮件地址有效。
只是一个奇怪但有效的电子邮件地址的例子:
"very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com
属于以下类型:
John.Doe@example.com
但实际上,RFC 5322:Internet 消息格式:地址规范指定电子邮件地址如下所示:
John Doe<John.Doe@example.com>
第一个"John Doe"是显示名称。
如果添加显示名称验证,它会变得相当复杂。但即使没有显示名称,大多数正则表达式也无法将以下电子邮件地址识别为有效地址: "John@Doe"@example.com
因此,建议只是在电子邮件地址看起来很奇怪时警告用户,但让用户决定他是否打错了字或他是否真的想输入该电子邮件地址。
除了验证之外,当用户只能键入合法字符时可能会有所帮助。
阅读我的文章 CodeProject: Email Address Validation Explained,它附带了一个完全实现和测试的 WPF 电子邮件文本框的代码。