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

问题描述:

我试过实现一个相当简单的电子邮件验证功能,即使输入是一个有效的电子邮件似乎返回错误的匹配。我已经搜索了现有的正则表达式的任何问题,但它似乎是正确的。用正则表达式VB.NET电子邮件验证

即使匹配返回一个错误值,程序正在进入下一个验证级别(它不应该)。

以下是电子邮件验证功能。

Function EmailAddressChecker(ByVal emailAddress As String) As Boolean 
     Dim regExPattern As String = "^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$" 
     Dim emailAddressMatch As Match = Regex.Match(emailAddress, regExPattern) 
     If emailAddressMatch.Success Then 
      Return True 
     Else 
      Return False 
     End If 
End Function 

而对于调用电子邮件验证功能的表单验证。

If (String.IsNullOrEmpty(EmailTextBox.Text) OrElse EmailAddressChecker(EmailTextBox.ToString)) Then 
      MessageBox.Show("Please enter a valid email addresss") 
      Return False 
End If 

所有这些的调用发生在点击事件触发级联严重的If语句检查是否所有的字段都设置。

跳过大块代码点击事件询问是否“AreFieldsSet <> True”。 “AreFieldsSet”函数的内部包含了多个输入的所有验证;其中之一是电子邮件验证if语句。

+0

我们需要看到这就是所谓的背景下 - 这是可能的,其中问题。 – antonpug 2012-04-17 17:21:12

+0

您可能还想考虑在try catch中实例化System.Net.Mail.MailAddress对象以进行电子邮件地址验证。 – N0Alias 2012-04-17 18:18:27

电子邮件是UpperCase吗?如果他们不是,他们不会匹配。

如果你要修改的正则表达式,以便它是不区分大小写,使用此:

"^[a-zA-Z0-9._%+-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$" 

要验证你需要使用正则表达式对象的IsMatch功能的电子邮件地址,它评估是否进入电子邮件地址有效。

Function EmailAddressChecker(ByVal emailAddress As String) As Boolean 
    Dim r As System.Text.RegularExpressions.Regex = Nothing 
    Dim regExPattern As String = "^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$" 

    If r.IsMatch(emailAddress ,regExPattern) Then 
     Return True 
    Else 
     Return False 
    End If 
End Function 
+0

我没有测试过这个,但是这不是功能上等同于原始代码的功能吗?较少的代码,但都应该做同样的事情。 – covertCoder 2012-04-17 17:37:47

+0

但我注意到电子邮件地址等于“”System.Windows.Forms.TextBox,Text:abc @ aosdf“。这显然需要处理。我认为我之前遇到了问题。例如“public override string ToString()” – Ealianis 2012-04-17 18:10:13

+0

通过'txtMyTextbox.Text'访问文本框应该以最纯粹的形式返回电子邮件字符串。调用'txtMyTextBox.ToString()'应该返回你提供的字符串“System .Windows.Forms.TextBox,Text:abc @ aosdf“。 – covertCoder 2012-04-17 18:17:36

你可以试试这个代码,您的表单验证If (String.IsNullOrEmpty(EmailTextBox.Text) OrElse EmailAddressChecker(EmailTextBox.ToString)<>true) Then MessageBox.Show("Please enter a valid email addresss") Return False End If

Public Shared Function ValidEmailAddress(ByVal emailAddress As String, ByRef errorMessage As String) As Boolean  

     If emailAddress.IndexOf("@") > -1 Then 
     If (emailAddress.IndexOf(".", emailAddress.IndexOf("@")) > emailAddress.IndexOf("@")) AndAlso emailAddress.Split(".").Length > 0 AndAlso emailAddress.Split(".")(1) <> "" Then 
      errorMessage = "" 
      Return True 
     End If 
    End If  
    Return False 
End Function