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

4
我尝试实现了一个相当简单的电子邮件验证函数,但似乎返回了错误的匹配结果,即使输入是有效的电子邮件地址。我已经搜索了现有正则表达式的任何问题,但它似乎是正确的。
即使匹配返回了错误的值,程序仍然会进入下一个验证级别(这不应该发生)。
以下是电子邮件验证函数。
Function EmailAddressChecker(ByVal emailAddress As String) As Boolean
        Dim regExPattern As String = "^[A-Z0-9._%+-]+@[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 语句。


我们需要看到这个被调用的上下文 - 这很可能是问题所在。 - antonpug
您可能还想考虑在 try catch 中实例化一个 System.Net.Mail.MailAddress 对象来验证电子邮件地址。 - NoAlias
4个回答

4

这些电子邮件是否都是大写?如果不是,它们将无法匹配。

如果你想修改正则表达式以忽略大小写,可以使用以下内容:

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

0
要验证电子邮件地址,您需要使用正则表达式对象的IsMatch函数,它会评估输入的电子邮件地址是否有效。
Function EmailAddressChecker(ByVal emailAddress As String) As Boolean
   Dim r As System.Text.RegularExpressions.Regex = Nothing
    Dim regExPattern As String = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$"

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

我还没有测试过这个,但这不是与原始代码的功能等效吗?代码更少,但两者应该做同样的事情。 - covertCoder
我注意到电子邮件地址等于“System.Windows.Forms.TextBox,Text:abc@aosdf”。这显然需要处理。我想我以前遇到过这个问题...修复方法类似于“public override string ToString()”??? - user856197
通过 txtMyTextbox.Text 访问文本框应该返回纯正的电子邮件字符串。调用 txtMyTextBox.ToString() 应该返回你提供的字符串 "System.Windows.Forms.TextBox, Text: abc@aosdf"。 - covertCoder

0
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

0
您可以尝试使用以下代码进行表单验证:If (String.IsNullOrEmpty(EmailTextBox.Text) OrElse EmailAddressChecker(EmailTextBox.ToString)<>true) Then MessageBox.Show("请输入有效的电子邮件地址") Return False End If


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接