Vb.net 我不断地得到;“真的”;电子邮件第一次匹配的声明和其他所有声明均为;假;
我目前正在做一个程序,将检测文本文件中的电子邮件,我能够拿出电子邮件,但无法验证电子邮件。验证代码如下所示:Vb.net 我不断地得到;“真的”;电子邮件第一次匹配的声明和其他所有声明均为;假;,vb.net,validation,email-validation,Vb.net,Validation,Email Validation,我目前正在做一个程序,将检测文本文件中的电子邮件,我能够拿出电子邮件,但无法验证电子邮件。验证代码如下所示: Dim truelist As New ArrayList For i As Integer = 0 To ListBox2.Items.Count - 1 truelist.Add(ListBox2.Items(i)) Next For Each item In truelist Dim result As Bool
Dim truelist As New ArrayList
For i As Integer = 0 To ListBox2.Items.Count - 1
truelist.Add(ListBox2.Items(i))
Next
For Each item In truelist
Dim result As Boolean
Dim rgx As New Regex("^[_a-z0-9-]+(.[_a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,4})$")
If rgx.IsMatch(item) Then
MessageBox.Show(item, "true")
result = True
Else
MessageBox.Show(item, "false")
result = False
End If
Next
我的示例输入是:
即使我的第一次输入与最后一次输入相同,但我将从最后一次输入中获得假返回值您的正则表达式不考虑任何空格,并计算从输入开始(
^
)到结束($
)的字符。因此,输入字符串中的任何前导空格或尾随空格都将无法匹配
Trim()
是一个VB命令,用于删除字符串末尾或开头的空格。LTrim
和RTrim
是删除任意一端空格的特定命令。源:;而表示String.Trim()
通常适用于空格
您可以Trim()
输入到ListBox
,这应该可以解决问题。在这种情况下,更安全、更好的方法是Trim()
在代码中最有效的时间将输入到Regex-数据验证。示例代码(基于您的代码)为:
Dim truelist As New ArrayList
For i As Integer = 0 To ListBox2.Items.Count - 1
truelist.Add(Trim(ListBox2.Items(i))) '*** Changed this line, added "Trim"
Next
For Each item In truelist
Dim result As Boolean
Dim rgx As New Regex("^[_a-z0-9-]+(.[_a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,4})$")
If rgx.IsMatch(item) Then
MessageBox.Show(item, "true")
result = True
Else
MessageBox.Show(item, "false")
result = False
End If
Next
另一种语法是truelist.Add(ListBox2.Items(i).Trim())
顺便说一句,这段代码已经成熟,可以在函数中进行设置,从而实现重用。下面是一个重构示例:
'[Main function elements ... Include Sub/Function header etc.]
Dim truelist As New ArrayList
For i As Integer = 0 To ListBox2.Items.Count - 1
truelist.Add(Trim(ListBox2.Items(i))) '*** Changed this line, added "Trim"
Next
For Each item In truelist
Dim result As Boolean
If IsValidEmailAddress(item) Then
' Do valid stuff
Else
' Do not-valid stuff
End If
Next
'[Main Sub/Function tail, include End Sub/Function as relevant]
Function IsValidEmailAddress(value as String) as Boolean
Dim rgx As New Regex("^[_a-z0-9-]+(.[_a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,4})$")
return rgx.IsMatch(item.Trim()) ' Note use of Trim here for encapsulated data validation.
' encapsulated data validation may or may not be what you want.
End Function
您还可以添加一些示例输入数据吗?否则我们将永远无法猜测是什么数据导致了您的问题。@JayV我已经更新了输入,谢谢您的建议。无法复制。唯一有效的匹配是第一个和最后一个,并且都经过验证。您是否已修剪输入以确保没有前导空格或尾随空格?
Trim(ListBox2.Items(i))
@AJD谢谢!它确实有效!非常感谢