我不断收到第一个匹配电子邮件的 "true" 语句,其余都是 "False"
I keep getting "true" statement for the first match of email and the rest all are "False"
我目前正在做一个程序,可以检测文本文件中的电子邮件,我可以提取电子邮件,但无法验证电子邮件。验证码是这样的:
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
我的示例输入是:
- ys_host@hotmail.com
- .kjdsd.@hotmail.com
- .as.das.@hotmail.com
- ~!U#)(!#U@hotmail.com
- idgohwoijgw12942149!@hotmail.com
- ys_host@hotmail.com
即使我的第一个输入与上一个输入相同,但我会从上一个输入中得到 false return
您的正则表达式不考虑任何 space,并评估从输入开始 (^
) 到结束 ($
) 的字符。因此,输入字符串中的任何前导或尾随 space 将无法匹配。
Trim()
是删除字符串末尾或开头的 space 的 VB 命令。 LTrim
和 RTrim
是删除两端的 space 的特定命令。资料来源:https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.strings.trim(v=vs.110).aspx; while https://docs.microsoft.com/en-us/dotnet/standard/base-types/trimming 表示 String.Trim()
一般适用于白色 space。
您可以 Trim()
输入您的 ListBox
,这应该可以解决问题。在这种情况下,更安全和更好的方法是 Trim()
正则表达式的输入 - 在代码中最有效的时间进行数据验证。示例代码(基于您的代码)为:
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
我目前正在做一个程序,可以检测文本文件中的电子邮件,我可以提取电子邮件,但无法验证电子邮件。验证码是这样的:
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
我的示例输入是:
- ys_host@hotmail.com
- .kjdsd.@hotmail.com
- .as.das.@hotmail.com
- ~!U#)(!#U@hotmail.com
- idgohwoijgw12942149!@hotmail.com
- ys_host@hotmail.com
即使我的第一个输入与上一个输入相同,但我会从上一个输入中得到 false return
您的正则表达式不考虑任何 space,并评估从输入开始 (^
) 到结束 ($
) 的字符。因此,输入字符串中的任何前导或尾随 space 将无法匹配。
Trim()
是删除字符串末尾或开头的 space 的 VB 命令。 LTrim
和 RTrim
是删除两端的 space 的特定命令。资料来源:https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.strings.trim(v=vs.110).aspx; while https://docs.microsoft.com/en-us/dotnet/standard/base-types/trimming 表示 String.Trim()
一般适用于白色 space。
您可以 Trim()
输入您的 ListBox
,这应该可以解决问题。在这种情况下,更安全和更好的方法是 Trim()
正则表达式的输入 - 在代码中最有效的时间进行数据验证。示例代码(基于您的代码)为:
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