@@ -6,67 +6,73 @@ Imports System.Globalization
66Imports System.Text.RegularExpressions
77
88Public Class RegexUtilities
9- Dim invalid As Boolean = False
10-
11- public Function IsValidEmail(strIn As String ) As Boolean
12- invalid = False
13- If String .IsNullOrEmpty(strIn) Then Return False
14-
15- ' Use IdnMapping class to convert Unicode domain names.
16- Try
17- strIn = Regex.Replace(strIn, "(@)(.+)$" , AddressOf Me .DomainMapper,
18- RegexOptions.None, TimeSpan.FromMilliseconds( 200 ))
19- Catch e As RegexMatchTimeoutException
20- Return False
21- End Try
22-
23- If invalid Then Return False
24-
25- ' Return true if strIn is in valid email format.
26- Try
27- Return Regex.IsMatch(strIn,
28- "^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
29- "(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$" ,
30- RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds( 250 ))
31- Catch e As RegexMatchTimeoutException
32- Return False
33- End Try
34- End Function
35-
36- Private Function DomainMapper(match As Match) As String
37- ' IdnMapping class with default property values.
38- Dim idn As New IdnMapping()
39-
40- Dim domainName As String = match.Groups( 2 ).Value
41- Try
42- domainName = idn.GetAscii(domainName)
43- Catch e As ArgumentException
44- invalid = True
45- End Try
46- Return match.Groups( 1 ).Value + domainName
47- End Function
9+
10+ Public Shared Function IsValidEmail(email As String ) As Boolean
11+
12+ If String .IsNullOrWhiteSpace(email) Then Return False
13+
14+ ' Use IdnMapping class to convert Unicode domain names.
15+ Try
16+ 'Examines the domain part of the email and normalizes it.
17+ Dim DomainMapper =
18+ Function (match As Match) As String
19+
20+ 'Use IdnMapping class to convert Unicode domain names.
21+ Dim idn = New IdnMapping
22+
23+ 'Pull out and process domain name (throws ArgumentException on invalid)
24+ Dim domainName As String = idn.GetAscii(match.Groups( 2 ).Value)
25+
26+ Return match.Groups( 1 ).Value & domainName
27+
28+ End Function
29+
30+ 'Normalize the domain
31+ email = Regex.Replace(email, "(@)(.+)$" , DomainMapper,
32+ RegexOptions.None, TimeSpan.FromMilliseconds( 200 ))
33+
34+ Catch e As RegexMatchTimeoutException
35+ Return False
36+
37+ Catch e As ArgumentException
38+ Return False
39+
40+ End Try
41+
42+ Try
43+ Return Regex.IsMatch(email,
44+ "^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
45+ "(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$" ,
46+ RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds( 250 ))
47+
48+ Catch e As RegexMatchTimeoutException
49+ Return False
50+
51+ End Try
52+
53+ End Function
54+
4855End Class
4956' </Snippet7>
5057
5158' <Snippet8>
5259Public Class Application
5360 Public Shared Sub Main()
54- Dim util As New RegexUtilities()
55- Dim emailAddresses() As String = { "david.jones@proseware.com" , "d.j@server1.proseware.com" , _
56- "jones@ms1.proseware.com" , "j.@server1.proseware.com" , _
57- "j@proseware.com9" , "js#internal@proseware.com" , _
58- "j_9@[129.126.118.1]" , "j..s@proseware.com" , _
59- "js*@proseware.com" , "js@proseware..com" , _
60- "js@proseware.com9" , "j.s@server1.proseware.com" ,
61- """j\""s\""""@proseware.com" , "js@contoso.中国" }
61+ Dim emailAddresses() As String = { "david.jones@proseware.com" , "d.j@server1.proseware.com" ,
62+ "jones@ms1.proseware.com" , "j.@server1.proseware.com" ,
63+ "j@proseware.com9" , "js#internal@proseware.com" ,
64+ "j_9@[129.126.118.1]" , "j..s@proseware.com" ,
65+ "js*@proseware.com" , "js@proseware..com" ,
66+ "js@proseware.com9" , "j.s@server1.proseware.com" ,
67+ """j\""s\""""@proseware.com" , "js@contoso.中国" }
6268
6369 For Each emailAddress As String In emailAddresses
64- If util .IsValidEmail(emailAddress) Then
65- Console.WriteLine( "Valid: {0}" , emailAddress )
70+ If RegexUtilities .IsValidEmail(emailAddress) Then
71+ Console.WriteLine( $ "Valid: {emailAddress}" )
6672 Else
67- Console.WriteLine( "Invalid: {0}" , emailAddress )
68- End If
69- Next
73+ Console.WriteLine( $ "Invalid: {emailAddress}" )
74+ End If
75+ Next
7076 End Sub
7177End Class
7278' The example displays the following output:
0 commit comments