使用正则表达式验证电子邮件VB.Net

问题描述:

我正在VB.Net的一个小项目中从一个文本框获取输入,并且需要验证这是一个电子邮件地址。我发现这个表达式“^ [_ a-z0-9 - ] +(。[_ a-z0-9 - ] +)@ [a-z0-9 - ] +(。[a-z0-9 - ] +)(。[az] {2,4})$“,但我无法找到任何方式来测试它是否通过。使用正则表达式验证电子邮件VB.Net

我要像一些代码:

if not txtEmail.text = regexString then 
    something happens.. 
else 
    something else happens.. 
end if 
+1

我可以点你,如果你谷歌“的事实vb.net正则表达式“,_first_链接为您提供了一步一步的指示? – Svante 2008-12-15 20:20:22

+2

这是一个很好的问题,在*上有记录 - 我在这里问这个问题没有看错。 – Jeffrey 2008-12-15 20:59:27

使用System.Text.RegularExpressions.Regex类:

Function IsEmail(Byval email as string) as boolean 
    Static emailExpression As New Regex("^[_a-z0-9-]+(.[a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$") 

    return emailExpression.IsMatch(email) 
End Function 

了解关于这个答案,最重要的是,我没有写正则表达式自己。有太多错误的方法似乎是正确的,并且有几个层次的细节可供您使用。例如,您是否想限制为有效的*域名?如果是,您如何解释他们现在偶尔添加新的TLD?如果正则表达式是最适合该测试的地方,还是应该有单独的代码进行检查?即使这个答案中的表达现在是非常陈旧的,因为它最初是作者创作的。我推荐的是找到一个资源,您可以使用它来维护您知道的表达式。

+3

`如果...那么返回True Else Return False`肯定处于反模式的前十名。 : -/ – 2008-12-15 20:13:16

+0

是的:这是我在最后一次演出中获得的一个坏习惯,政策阻止直接返回布尔表达式的结果。修复示例。 – 2008-12-15 20:16:53

+0

我发现它需要作为“新的System.Text.RegularExpressions.Regex”它说“作为新的正则表达式”Thx的帮助:) – AndersE 2008-12-15 20:22:43

这是一个很棒的网站,http://regexlib.com/。它不仅有一个测试应用程序,您可以在其中粘贴正则表达式并对其进行测试,但也有一个正则表达式库,可用于社区对其有效性的反馈等。我不是正则表达式大师,所以当我需要一个快速的正则表达式时,我会去这里。另外,如果您正在考虑自己开发正则表达式,那么有一个名为Regex Buddy的优秀工具,它允许您使用易于理解的正则表达式的英语解释来即时创建和测试正则表达式。

这个正则表达式并不是真正完整的......其实......大部分都不是(请查看this articlethis one)。

除非你真的喜欢痛苦,否则正则表达式不是验证电子邮件地址的正确方法。

电子邮件地址:RFC 2822(简体) 匹配正常的电子邮件地址。不检查*域名。 要求“不区分大小写”选项为ON。

Dim FoundMatch As Boolean 
Try 
    FoundMatch = Regex.IsMatch(txtEmail.text, "\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) 
Catch ex As ArgumentException 
    'Syntax error in the regular expression 
End Try 

If Not FoundMatch Then 
    Error = True 
Else 
    Error = False 
End If 

my article on matching email addresses with a regex选择您喜欢的正则表达式,并把它插入到这个Visual Basic代码:

If Regex.IsMatch(SubjectString, "regex") Then 
    Error = False 
Else 
    Error = True 
End If 

匹配的电子邮件地址的最佳正则表达式是,我不希望得到一个有争议的话题进入这里。我的文章讨论了在选择正则表达式时应该注意的问题。 Joel Coehoorn的回答中的正则表达式绝对不是一个好的表达式。

可能题外话,因为它不是一个正则表达式的解决方案,但你可以只使用一些内置的.NET 2.0功能:

try 
{ 
    MailAddress email = new MailAddress(txtEmail.Text); 
} 
catch(FormatException fe) 
{ 
    // output error 
}