【问题标题】:How to use an excel formula to validate an customized email address?如何使用 Excel 公式来验证自定义的电子邮件地址?
【发布时间】:2020-10-19 05:08:34
【问题描述】:

我对 excel VBA 宏非常陌生,我只想纠正一个 excel 公式来验证已自定义的电子邮件。例如,我要查找的电子邮件必须以“@gmail.com”结尾,并且必须拒绝以下邮件;

  1. [无字]@gmail.com
  2. [空格]@gmail.com
  3. xxx@gmail.com[任意字]
  4. xxx@gmail..com
  5. xxx@gmail/.com
  6. xxx@gmail/com

为了验证电子邮件地址,我编写了一个正则表达式,如下所示;

^([a-zA-Z0-9_\-\.]+)@(\b(gmail)\b)+(\.\b(com)\b)$

我尝试了不同的方法将这些正则表达式应用到像 =MATCH 这样的 excel 公式中,但没有奏效。我只需要使用 Excel 公式完成此电子邮件验证。

如果有人可以帮助我,我将不胜感激?

【问题讨论】:

  • this 有帮助吗?
  • @Mandy8055 是的,这很有帮助。您能告诉我如何在 Excel 公式中使用它吗?

标签: regex excel vba excel-formula email-validation


【解决方案1】:

在使用 excel 中的正则表达式之前;你需要在里面设置VB才能使用它。请按照以下步骤操作:

将 VBA 引用添加到“Microsoft VBScript 正则表达式 5.5”的步骤

  • 选择“开发者”标签 (I cannot find this tab what to do?)

  • 从“代码”功能区部分选择“Visual Basic”图标

  • 在“Microsoft Visual Basic for Applications”窗口的顶部菜单中选择“工具”。

  • 选择“参考”

  • 选中“Microsoft VBScript 正则表达式 5.5”旁边的框以包含在您的工作簿中。

  • 点击“确定”。

  • 在“Project-VBAProject”窗格(位于编辑器窗口的左上角)中右键单击您的工作簿名称,然后从上下文菜单中选择“插入”->“模块”。屏幕截图可能如下所示:

  • 现在;模块内部;粘贴下面的函数。

Function simpleCellRegex(MyVal As String) As String
    
    Dim regEx As New RegExp

    'Below is the flag options'
    With regEx
        .Global = True
        .Pattern = "^[\w.-]+@gmail\.com$"
    End With

    If regEx.Test(MyVal) Then
        simpleCellRegex = "Matched"
    Else
        simpleCellRegex = "Not matched"
    End If

End Function

将整个工作簿保存为 启用 Excel 宏的工作簿而不是 Excel 工作簿

就是这样。一切就绪。

现在转到您的 Excel 工作表并在您的公式选项卡中使用上述声明的宏。我用过

结果:

【讨论】:

  • 非常整洁。我想你应该提到,在 VBE 中,需要插入一个模块并粘贴上面的代码。否则它不会显示为 UDF。
  • @Mandy8055 是的,我也会检查一下。
  • 感谢@JvdV 对上述答案中的代码进行了改进。
【解决方案2】:

虽然您已经提到要避免什么,但您并没有真正提到要完全匹配的内容。很难想象你会想要匹配 ....@gmail.com___@gmail.com__.__@gmail.com 这样的东西,因此更安全一点是:

^(?!_+(?:[.-]?_*)*)\w+(?:[-.]?\w+)*@gmail\.com$

见在线Demo。它并不完美,但可能会处理一些您实际上需要匹配失败的情况。

要将其称为 UDF,您可以使用:

Function REGEXMATCH(str As String, pat As String) As Boolean
    
    With CreateObject("vbscript.regexp")
        .Global = True
        .Pattern = pat
        REGEXMATCH = .Test(str)
    End With

End Function

您现在可以使用=REGEXMATCH(A1,"^(?!_+(?:[.-]?_*)*)\w+(?:[-.]?\w+)*@gmail\.com$") 调用它

注意我在正则表达式对象上使用了后期绑定。这是个人喜好,在您需要分发项目时可能会派上用场。

【讨论】:

  • 感谢您的解决方案。这太灵活了。
猜你喜欢
  • 2018-08-21
  • 1970-01-01
  • 2019-05-07
  • 2019-08-27
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
相关资源
最近更新 更多