VB中的电子邮件格式检查

5

我希望能够检查电子邮件地址是否有效。

如何在VB中使用正则表达式验证电子邮件地址的有效性?

([\w-+]+(?:\.[\w-+]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7})

可能是使用正则表达式VB.Net验证电子邮件的重复问题。 - Jodrell
你不应该简化你的问题为“如何在VB.Net中匹配正则表达式吗?” - Jodrell
3个回答

3

MSDN文章:如何验证电子邮件地址格式的有效性

这个示例方法调用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

1
    Function validateEmail(emailAddress) As Boolean

    Dim email As New Regex("([\w-+]+(?:\.[\w-+]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7})")
    If email.IsMatch(emailAddress) Then
        Return True
    Else
        Return False
    End If

为什么你在尝试一次之前就问问题呢? - Ajay Pandya
为什么不直接使用 Return email.IsMatch(emailAddress) 呢? - Jodrell

0

这是我的方法,不需要搞乱正则表达式,取自我的ElektroKitAPI

enter image description here

''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Validates a mail address.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <example> This is a code example.
''' <code>
''' Dim isValid As Boolean = ValidateMail("Address@Gmail.com")
''' Dim isValid As Boolean = ValidateMail("mailto:Address@Gmail.com")
''' </code>
''' </example>
''' ----------------------------------------------------------------------------------------------------
''' <param name="address">
''' The mail address.
''' </param>
''' ----------------------------------------------------------------------------------------------------
''' <returns>
''' <see langword="True"/> if the mail address is valid, <see langword="False"/> otherwise.
''' </returns>
''' ----------------------------------------------------------------------------------------------------
<DebuggerStepThrough>
Public Shared Function ValidateMail(ByVal address As String) As Boolean

    If Not address.StartsWith("mailto:", StringComparison.OrdinalIgnoreCase) Then
        address = address.Insert(0, "mailto:")
    End If

    If Not Uri.IsWellFormedUriString(address, UriKind.Absolute) Then
        Return False
    End If

    Dim result As Uri = Nothing
    If Uri.TryCreate(address, UriKind.Absolute, result) Then
        Return (result.Scheme = Uri.UriSchemeMailto)

    Else
        Return False

    End If

End Function

注意:我没有对大量电子邮件列表进行深入测试。
如果您喜欢正则表达式,那么根据这是我的自己的链接维基百科规范,与其他“通用”表达式相比,它会给出更好的结果。但是,该表达式并不完美地构建,例如,它无法避免在维基百科中指定的双点冲突,但我们假设不会遇到像那样的奇怪命名异常情况。

这个表达式从未给我误报(目前为止),但像任何其他正则表达式一样,使用时需自担风险:

enter image description here

''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' A pattern that matches an e-mail address.
''' <para></para>
''' 
''' For Example:
''' <para></para>
''' <c>local@domain.com</c>
''' 
''' </summary>
''' ----------------------------------------------------------------------------------------------------
Public Const EMail As String =
    "^(?<address>(?<local>[\d\w!#\$%\&'\*\+-/=\?\^_`\\\|~""\(\),:;\<\>@\[\]\{\}\.]+)@(?<domain>[\d\w-\.]+)\..+)$"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接