如何使用 .NET Framework 验证电子邮件地址格式?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1331084/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-03 13:12:31  来源:igfitidea点击:

How do I validate email address formatting with the .NET Framework?

.netvb.netvalidationemail

提问by Zack Peterson

I want a function to test that a string is formatted like an email address.

我想要一个函数来测试字符串的格式是否像电子邮件地址。

What comes built-in with the .NET framework to do this?

.NET 框架内置了什么功能来做到这一点?

This works:

这有效:

Function IsValidEmailFormat(ByVal s As String) As Boolean
    Try
        Dim a As New System.Net.Mail.MailAddress(s)
    Catch
        Return False
    End Try
    Return True
End Function

But, is there a more elegant way?

但是,有没有更优雅的方式呢?

回答by Jeff Tucker

Don't bother with your own validation. .NET 4.0 has significantly improved validation via the MailAddressclass. Just use MailAddress address = new MailAddress(input)and if it throws, it's not valid. If there is any possible interpretation of your input as an RFC 2822 compliant email address spec, it will parse it as such. The regexes above, even the MSDN article one, are wrong because they fail to take into account a display name, a quoted local part, a domain literal value for the domain, correct dot-atom specifications for the local part, the possibility that a mail address could be in angle brackets, multiple quoted-string values for the display name, escaped characters, unicode in the display name, comments, and maximum valid mail address length. I spent three weeks re-writing the mail address parser in .NET 4.0 for System.Net.Mail and trust me, it was way harder than just coming up with some regular expression since there are lots of edge-cases. The MailAddressclass in .NET 4.0 beta 2 will have this improved functionality.

不要打扰你自己的验证。.NET 4.0 通过MailAddress该类显着改进了验证。只需使用MailAddress address = new MailAddress(input)如果抛出,则无效。如果您的输入有任何可能的解释为符合 RFC 2822 的电子邮件地址规范,它会解析它。上面的正则表达式,即使是 MSDN 第一篇文章,也是错误的,因为它们没有考虑显示名称、引用的本地部分、域的域文字值、本地部分的正确点原子规范、邮件地址可以在尖括号中、显示名称的多个带引号的字符串值、转义字符、显示名称中的 unicode、注释和最大有效邮件地址长度。我花了三个星期在 .NET 4.0 中为 System.Net.Mail 重新编写邮件地址解析器,相信我,这比提出一些正则表达式要困难得多,因为有很多边缘情况。这MailAddress.NET 4.0 beta 2 中的类将具有这种改进的功能。

One more thing, the only thing you can validate is the format of the mail address. You can't ever validate that an email address is actually valid for receiving email without sending an email to that address and seeing if the server accepts it for delivery. It is impossible and while there are SMTP commands you can give to the mail server to attempt to validate it, many times these will be disabled or will return incorrect results since this is a common way for spammers to find email addresses.

还有一件事,您唯一可以验证的是邮件地址的格式。如果不向该地址发送电子邮件并查看服务器是否接受发送,您永远无法验证电子邮件地址实际上是否有效接收电子邮件。这是不可能的,虽然您可以向邮件服务器提供 SMTP 命令以尝试对其进行验证,但很多时候这些命令将被禁用或将返回不正确的结果,因为这是垃圾邮件发送者查找电子邮件地址的常用方法。

回答by Edmundo

MSDN Article: How to: Verify That Strings are in Valid E-Mail Format

MSDN 文章:如何:验证字符串是否采用有效的电子邮件格式

This example method calls the Regex.IsMatch(String, String) method to verify that the string conforms to a regular expression pattern.

此示例方法调用 Regex.IsMatch(String, String) 方法来验证字符串是否符合正则表达式模式。

Function IsValidEmailFormat(ByVal s As String) As Boolean
    Return Regex.IsMatch(s, "^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$")
End Function

回答by Rachitha Jewandara

'-----------------------------------------------------------------------

'Creater : Rachitha Madusanka

'http://www.megazoon.com

'[email protected]

'[email protected]

'Web Designer and Software Developer

'@ http://www.zionx.net16.net

'-----------------------------------------------------------------------




Function ValidEmail(ByVal strCheck As String) As Boolean
    Try
        Dim bCK As Boolean
        Dim strDomainType As String


        Const sInvalidChars As String = "!#$%^&*()=+{}[]|\;:'/?>,< "
        Dim i As Integer

        'Check to see if there is a double quote
        bCK = Not InStr(1, strCheck, Chr(34)) > 0
        If Not bCK Then GoTo ExitFunction

        'Check to see if there are consecutive dots
        bCK = Not InStr(1, strCheck, "..") > 0
        If Not bCK Then GoTo ExitFunction

        ' Check for invalid characters.
        If Len(strCheck) > Len(sInvalidChars) Then
            For i = 1 To Len(sInvalidChars)
                If InStr(strCheck, Mid(sInvalidChars, i, 1)) > 0 Then
                    bCK = False
                    GoTo ExitFunction
                End If
            Next
        Else
            For i = 1 To Len(strCheck)
                If InStr(sInvalidChars, Mid(strCheck, i, 1)) > 0 Then
                    bCK = False
                    GoTo ExitFunction
                End If
            Next
        End If

        If InStr(1, strCheck, "@") > 1 Then 'Check for an @ symbol
            bCK = Len(Left(strCheck, InStr(1, strCheck, "@") - 1)) > 0
        Else
            bCK = False
        End If
        If Not bCK Then GoTo ExitFunction

        strCheck = Right(strCheck, Len(strCheck) - InStr(1, strCheck, "@"))
        bCK = Not InStr(1, strCheck, "@") > 0 'Check to see if there are too many @'s
        If Not bCK Then GoTo ExitFunction

        strDomainType = Right(strCheck, Len(strCheck) - InStr(1, strCheck, "."))
        bCK = Len(strDomainType) > 0 And InStr(1, strCheck, ".") < Len(strCheck)
        If Not bCK Then GoTo ExitFunction

        strCheck = Left(strCheck, Len(strCheck) - Len(strDomainType) - 1)
        Do Until InStr(1, strCheck, ".") <= 1
            If Len(strCheck) >= InStr(1, strCheck, ".") Then
                strCheck = Left(strCheck, Len(strCheck) - (InStr(1, strCheck, ".") - 1))
            Else
                bCK = False
                GoTo ExitFunction
            End If
        Loop
        If strCheck = "." Or Len(strCheck) = 0 Then bCK = False

ExitFunction:
        ValidEmail = bCK
    Catch ex As ArgumentException
        Return False
    End Try
    Return ValidEmail
End Function

回答by texwil

    Public Function ValidateEmail(ByVal strCheck As String) As Boolean
        Try
            Dim vEmailAddress As New System.Net.Mail.MailAddress(strCheck)
        Catch ex As Exception
            Return False
        End Try
        Return True
    End Function

回答by Vanita Purekar

you first have to restrict user by entering wrong symbols, you can do this by using textbox KeyPress event

您首先必须通过输入错误的符号来限制用户,您可以使用文本框 KeyPress 事件来做到这一点

Private Sub txtemailid_KeyPress(ByVal sender As System.Object, 
                                ByVal e As System.Windows.FormsKeyPressEventArgs) Handles txtemailid.KeyPress

    Dim ac As String = "@"
    If e.KeyChar <> ChrW(Keys.Back) Then
        If Asc(e.KeyChar) < 97 Or Asc(e.KeyChar) > 122 Then
            If Asc(e.KeyChar) <> 46 And Asc(e.KeyChar) <> 95 Then
                If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
                    If ac.IndexOf(e.KeyChar) = -1 Then
                        e.Handled = True

                    Else

                        If txtemailid.Text.Contains("@") And e.KeyChar = "@" Then
                            e.Handled = True
                        End If

                    End If


                End If
            End If
        End If

    End If

End Sub

the above code will only allow user to input a-z(small), 0 to 9(digits), @,., _

上面的代码只允许用户输入 az(small), 0 to 9(digits), @,., _

and after using validating event of textbox control to validate the email id using regular expression

并在使用文本框控件的验证事件以使用正则表达式验证电子邮件 ID 之后

Private Sub txtemailid_Validating(ByVal sender As System.Object, 
                                  ByVal e As System.ComponentModel.CancelEventArgs) 
    Handles txtemailid.Validating

    Dim pattern As String = "^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|0-9]+([_][a-z|0-9]+)*)?@[a-z][a-z|0-9|]*\.([a-z][a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$"


    Dim match As System.Text.RegularExpressions.Match = Regex.Match(txtemailid.Text.Trim(), pattern, RegexOptions.IgnoreCase)
    If (match.Success) Then
        MessageBox.Show("Success", "Checking")
    Else
        MessageBox.Show("Please enter a valid email id", "Checking")
        txtemailid.Clear()
    End If
End Sub

回答by Lucky

You should use Regular Expressionsto validate email addresses.

您应该使用正则表达式来验证电子邮件地址。

回答by ????? ??????? ????? ??????

Another function to check that the email is valid or not :

检查电子邮件是否有效的另一个功能:

Public Function ValidEmail(ByVal strCheck As String) As Boolean
    Try
        Dim bCK As Boolean
        Dim strDomainType As String
        Const sInvalidChars As String = "!#$%^&*()=+{}[]|\;:'/?>,< "
        Dim i As Integer
        'Check to see if there is a double quote
        bCK = Not InStr(1, strCheck, Chr(34)) > 0
        If Not bCK Then GoTo ExitFunction
        'Check to see if there are consecutive dots
        bCK = Not InStr(1, strCheck, "..") > 0
        If Not bCK Then GoTo ExitFunction
        ' Check for invalid characters.
        If Len(strCheck) > Len(sInvalidChars) Then
            For i = 1 To Len(sInvalidChars)
                If InStr(strCheck, Mid(sInvalidChars, i, 1)) > 0 Then
                    bCK = False
                    GoTo ExitFunction
                End If
            Next
        Else
            For i = 1 To Len(strCheck)
                If InStr(sInvalidChars, Mid(strCheck, i, 1)) > 0 Then
                    bCK = False
                    GoTo ExitFunction
                End If
            Next
        End If

        If InStr(1, strCheck, "@") > 1 Then 'Check for an @ symbol
            bCK = Len(Left(strCheck, InStr(1, strCheck, "@") - 1)) > 0
        Else
            bCK = False
        End If
        If Not bCK Then GoTo ExitFunction
        strCheck = Right(strCheck, Len(strCheck) - InStr(1, strCheck, "@"))
        bCK = Not InStr(1, strCheck, "@") > 0 'Check to see if there are too many @'s
        If Not bCK Then GoTo ExitFunction
        strDomainType = Right(strCheck, Len(strCheck) - InStr(1, strCheck, "."))
        bCK = Len(strDomainType) > 0 And InStr(1, strCheck, ".") < Len(strCheck)
        If Not bCK Then GoTo ExitFunction
        strCheck = Left(strCheck, Len(strCheck) - Len(strDomainType) - 1)
        Do Until InStr(1, strCheck, ".") <= 1
            If Len(strCheck) >= InStr(1, strCheck, ".") Then
                strCheck = Left(strCheck, Len(strCheck) - (InStr(1, strCheck, ".") - 1))
            Else
                bCK = False
                GoTo ExitFunction
            End If
        Loop
        If strCheck = "." Or Len(strCheck) = 0 Then bCK = False
ExitFunction:
        ValidEmail = bCK
    Catch ex As ArgumentException
        Return False
    End Try
    Return ValidEmail
End Function

How to use it:

如何使用它:

Private Sub TextBox2_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox2.KeyDown
    If e.KeyCode = Keys.Enter Then
        If TextBox2.Text = "" Then
            MsgBox("Write Down Your email and Press Enter") : TextBox2.Select()
        Else

            If ValidEmail(TextBox2.Text) Then ' to check if the email is valid or not
                   'do whatever
            Else
                MsgBox("Please Write Valid Email")
                TextBox2.Select()
            End If
        End If
    End If
End Sub

回答by RJBaytos

EMails like "address@localhost" and "[email protected]" are actually valid addresses and you can test these by running your own email server (usually done by modifying the host file as well). For a complete solution, however:

像“address@localhost”和“[email protected]”这样的电子邮件实际上是有效的地址,您可以通过运行自己的电子邮件服务器来测试这些地址(通常也可以通过修改主机文件来完成)。但是,对于完整的解决方案:

''' <summary>
''' METHODS FOR SENDING AND VALIDATING EMAIL
''' </summary>
''' <remarks></remarks>
Public Class email

    ''' <summary>
    ''' check if email format is valid
    ''' </summary>
    ''' <param name="emailAddress">[required] Email address.</param>
    ''' <param name="disallowLocalDomain">[optional] Allow headers like "@localhost"?</param>
    ''' <param name="allowAlerts">[optional] Enable error messages?</param>
    ''' <returns>Returns true if email is valid and false otherwise.</returns>
    ''' <remarks></remarks>
    Public Shared Function isValid(ByVal emailAddress As String,
                                   Optional ByVal disallowLocalDomain As Boolean = True,
                                   Optional ByVal allowAlerts As Boolean = True
                                   ) As Boolean
        Try
            Dim mailParts() As String = emailAddress.Split("@")
            If mailParts.Length <> 2 Then
                If allowAlerts Then
                    MsgBox("Valid email addresses are formatted [[email protected]]. " &
                           "Your address is missing a header [i.e. ""@domain.tld""].",
                           MsgBoxStyle.Exclamation, "No Header Specified")
                End If
                Return False
            End If
            If mailParts(mailParts.GetLowerBound(0)) = "" Then
                If allowAlerts Then
                    MsgBox("Valid email addresses are formatted [[email protected]]. " &
                           "The username portion of the e-mail address you provided (before the @ symbol) is empty.",
                           MsgBoxStyle.Exclamation, "Invalid Email User")
                End If
                Return False
            End If
            Dim headerParts() As String = mailParts(mailParts.GetUpperBound(0)).Split(".")
            If disallowLocalDomain AndAlso headerParts.Length < 2 Then
                If allowAlerts Then
                    MsgBox("Valid email addresses are formatted [[email protected]]. " &
                           "Although addresses formatted like [sample@domain] are valid, " &
                           "only addresses with headers like ""sample.org"", ""sample.com"", and etc. " &
                           "[i.e. @domain.org] are accepted.",
                           MsgBoxStyle.Exclamation, "Invalid Header")
                End If
                Return False
            ElseIf headerParts(headerParts.GetLowerBound(0)) = "" Or
                   headerParts(headerParts.GetUpperBound(0)) = "" Then
                If allowAlerts Then
                    MsgBox("Valid email addresses are formatted [[email protected]]. " &
                           "Your header """ & mailParts(mailParts.GetUpperBound(0)) & """ is invalid.",
                           MsgBoxStyle.Exclamation, "Invalid Header")
                End If
                Return False
            End If
            Dim address As MailAddress = New MailAddress(emailAddress)
        Catch ex As Exception
            If allowAlerts Then
                MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Invalid Email Address")
            End If
            Return False
        End Try
        Return True
    End Function

End Class 'email'

回答by Frederik Gheysels

You could use a Regex to do this.

您可以使用正则表达式来执行此操作。

There have been written a lot of articles about it; this came up when I searched google for 'regex to validate email address': Find or Validate an Email Address.

已经写了很多关于它的文章;当我在 google 中搜索 'regex to validate email address': Find or Validate an Email Address 时出现了这个问题

回答by codemonkeyliketab

I have tested the approved 'answer' in this case and it does not seem to adhere to the specifications of what actually is a valid email address. After many headaches I found this regex which does a much better job than Microsoft does.

在这种情况下,我已经测试了批准的“答案”,它似乎不符合实际有效电子邮件地址的规范。经过多次头痛,我发现这个正则表达式比微软做得好得多。

"(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t]" +
")+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|""(?:[^\""\r\]|\.|(?:(?:\r\n)?[ \t]))*""(?:(?:" +
"\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(" +
"?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|""(?:[^\""\r\]|\.|(?:(?:\r\n)?[ " +
"\t]))*""(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-##代码##" +
"31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\" +
"](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+" +
"(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:" +
"(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z" +
"|(?=[\[""()<>@,;:\"".\[\]]))|""(?:[^\""\r\]|\.|(?:(?:\r\n)?[ \t]))*""(?:(?:\r\n)" +
"?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\" +
"r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[" +
" \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)" +
"?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t]" +
")*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[" +
" \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*" +
")(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t]" +
")+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*))*)" +
"*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+" +
"|\Z|(?=[\[""()<>@,;:\"".\[\]]))|""(?:[^\""\r\]|\.|(?:(?:\r\n)?[ \t]))*""(?:(?:\r" +
"\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:" +
"\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|""(?:[^\""\r\]|\.|(?:(?:\r\n)?[ \t" +
"]))*""(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1" +
"]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](" +
"?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?" +
":(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?" +
":\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?" +
":(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|""(?:[^\""\r\]|\.|(?:(?:\r\n)?" +
"[ \t]))*""(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\"".\[\] " +
"##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|""(?:[^\""\r\]|" +
"\.|(?:(?:\r\n)?[ \t]))*""(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>" +
"@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|""" +
"(?:[^\""\r\]|\.|(?:(?:\r\n)?[ \t]))*""(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]" +
")*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\" +
""".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?" +
":[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[" +
"\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\"".\[\] ##代码##0-" +
"1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|""(?:[^\""\r\]|\.|(" +
"?:(?:\r\n)?[ \t]))*""(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;" +
":\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([" +
"^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\""" +
".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\" +
"]\r\]|\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\" +
"[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\" +
"r\]|\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] " +
"##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]" +
"|\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\"".\[\] ##代码##" +
"00-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|""(?:[^\""\r\]|\" +
".|(?:(?:\r\n)?[ \t]))*""(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@," +
";:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|""(?" +
":[^\""\r\]|\.|(?:(?:\r\n)?[ \t]))*""(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*" +
"(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\""." +
"\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[" +
"^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\]" +
"]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(" +
"?:(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\" +
""".\[\]]))|""(?:[^\""\r\]|\.|(?:(?:\r\n)?[ \t]))*""(?:(?:\r\n)?[ \t])*)(?:\.(?:(" +
"?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[" +
"\[""()<>@,;:\"".\[\]]))|""(?:[^\""\r\]|\.|(?:(?:\r\n)?[ \t]))*""(?:(?:\r\n)?[ \t" +
"])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t" +
"])+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*)(?" +
":\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|" +
"\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*))*|(?:" +
"[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\"".\[\" +
"]]))|""(?:[^\""\r\]|\.|(?:(?:\r\n)?[ \t]))*""(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)" +
"?[ \t])*(?:@(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""" +
"()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)" +
"?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>" +
"@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[" +
" \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@," +
";:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]" +
")*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\" +
""".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?" +
"(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[""()<>@,;:\""." +
"\[\]]))|""(?:[^\""\r\]|\.|(?:(?:\r\n)?[ \t]))*""(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:" +
"\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[" +
"""()<>@,;:\"".\[\]]))|""(?:[^\""\r\]|\.|(?:(?:\r\n)?[ \t]))*""(?:(?:\r\n)?[ \t])" +
"*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])" +
"+|\Z|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*)(?:\" +
".(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"".\[\] ##代码##0-1]+(?:(?:(?:\r\n)?[ \t])+|\Z" +
"|(?=[\[""()<>@,;:\"".\[\]]))|\[([^\[\]\r\]|\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(" +
"?:\r\n)?[ \t])*))*)?;\s*)"

I have already formatted it as a vb string using a simple application. Too bad stack overflow is more interested in being a 'coding repository' than having the complete answer for the problem.

我已经使用一个简单的应用程序将其格式化为 vb 字符串。太糟糕了,堆栈溢出对成为“编码存储库”更感兴趣,而不是拥有问题的完整答案。