MS Access 表的电子邮件地址验证

Posted

技术标签:

【中文标题】MS Access 表的电子邮件地址验证【英文标题】:Email address validation for MS Access table 【发布时间】:2018-04-30 12:24:40 【问题描述】:

我的表在 Access 表的“验证规则”部分中进行了以下验证,以使我输入的大多数电子邮件地址保持干净:

喜欢“?@?.??”而不喜欢“[!a-z@=.^_$%!#&'`|?~/-]" 和 .

但是,它仍然允许像 Bla.Bla@testing.co.u 这样的东西

我找到了这个 javascript 链接。它比我的做得好得多,并且会过滤掉上面提到的那种电子邮件地址。 How to validate an email address in JavaScript

MS Access 的外观如何?函数或验证规则很好,只是想知道它是否可能。

【问题讨论】:

另一个潜入的邮件也是 bla@web.d 之类的电子邮件,而不是 bla@web.de。 【参考方案1】:

RegExp 是验证电子邮件的最佳方式。

这是一个 VBA 函数,在您链接的答案中使用正则表达式

Public Function Email_Validation(ByVal strEmail As String) As Boolean


    Const strRexExp As String = "^(([^<>()\[\]\\.,;:\s@""]+(\.[^<>()\[\]\\.,;:\s@""]+)*)|("".+""))@((\[[0-9]1,3\.[0-9]1,3\.[0-9]1,3\.[0-9]1,3\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]2,))$"

    Dim objRG As New RegExp
    Dim IsValid As Boolean

    On Error GoTo Err_Handler

    strEmail = Trim(strEmail)

    objRG.IgnoreCase = True
    objRG.Global = True
    objRG.Pattern = strRexExp

    IsValid = objRG.Test(strEmail)


Exit_Function:
    Email_Validation = IsValid
    Exit Function

Err_Handler:
    IsValid = False
    MsgBox "Email_Validation Error: " & Err.Number & vbCrLf & vbCrLf & Err.Description
    Resume Exit_Function
End Function

您必须添加对您项目的引用:Microsoft VBScript Regular Expressions X.X

当你想验证时,调用函数使用

Email_Validation("Bla.Bla@testing.co.u")

它将返回 TRUE 或 FALSE(在这种情况下为 false)

【讨论】:

对于那些至少看 Microsoft VBScript Regular Expressions 5.5 Ms Access 2013 的人【参考方案2】:

嘿,Thomas 非常感谢你的功能真的很有帮助。对于其他所有人,我刚刚发布了我如何实现您的功能。

Public Function Email_Validation(ByVal strEmail As String) As Boolean


    Const strRexExp As String = "^(([^<>()\[\]\\.,;:\s@""]+(\.[^<>()\[\]\\.,;:\s@""]+)*)|("".+""))@((\[[0-9]1,3\.[0-9]1,3\.[0-9]1,3\.[0-9]1,3\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]2,))$"

    Dim objRG As New RegExp
    Dim IsValid As Boolean

    On Error GoTo Err_Handler

    strEmail = Trim(strEmail)

    objRG.IgnoreCase = True
    objRG.Global = True
    objRG.Pattern = strRexExp

    IsValid = objRG.Test(strEmail)


Exit_Function:
    Email_Validation = IsValid
    Exit Function

Err_Handler:
    IsValid = False
    MsgBox "Email_Validation Error: " & Err.Number & vbCrLf & vbCrLf & Err.Description
    Resume Exit_Function
End Function

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Select * FROM Emails WHERE DateAdded =#" & Date & "#;")
Dim Email As String

'Check to see if the table has any rows
If Not (rs.EOF And rs.BOF) Then
    rs.MoveFirst 'Unnecessary in this case, but still a good habit
    Do Until rs.EOF = True
        'Perform an edit
       If Email_Validation(rs!Emails) = True Then
        rs.MoveNext
       Else
        rs.Delete
       End If
    rs.MoveNext
    Loop
Else
MsgBox "There are no records in the recordset."
End If

rs.Close 'Close the recordset
Set rs = Nothing 'Clean up

【讨论】:

SQL中的where语句只是为了减少带回的记录数

以上是关于MS Access 表的电子邮件地址验证的主要内容,如果未能解决你的问题,请参考以下文章

使用不同的 Outlook 电子邮件地址从 Access 发送电子邮件

使用 Access 2007 中的电子邮件地址在 Outlook 中发送电子邮件

带有电子邮件地址的 FBSDKLoginManager 令牌

怎样在windows messenger中验证我的电子邮件地址?

如何在 Laravel 中验证电子邮件地址是不是是有效的 PayPal 电子邮件地址

***域的电子邮件地址验证