用正则表达式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语句。
电子邮件是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
我没有测试过这个,但是这不是功能上等同于原始代码的功能吗?较少的代码,但都应该做同样的事情。 – covertCoder 2012-04-17 17:37:47
但我注意到电子邮件地址等于“”System.Windows.Forms.TextBox,Text:abc @ aosdf“。这显然需要处理。我认为我之前遇到了问题。例如“public override string ToString()” – Ealianis 2012-04-17 18:10:13
通过'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
我们需要看到这就是所谓的背景下 - 这是可能的,其中问题。 – antonpug 2012-04-17 17:21:12
您可能还想考虑在try catch中实例化System.Net.Mail.MailAddress对象以进行电子邮件地址验证。 – N0Alias 2012-04-17 18:18:27