2011-04-28 32 views
1

我有一个Access Db中的文本框,用户应该输入一个电子邮件地址。这是通过从Outlook 2010复制完成的。不幸的是,该副本还会带来名称和尖括号。 Fred Bloggs <[email protected]>MS Access Strip的一切*但是*从文本框的电子邮件地址

我希望利用这个表达式

.pattern = "[\w-\.]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,3}" 

识别电子邮件地址

,但我将如何去剥离一切,如果没有输入有效的电子邮件地址抛出了一个错误?谢谢!

回答

0

Microsoft Access VBA没有内置的Regex引擎。但是,您可以添加对VBScript正则表达式库的引用并使用该引用。

这里有一个相关的问题,解释如何做到这一点:

+1

后期绑定优于创建引用。 – 2011-04-29 02:37:02

+0

@David:嗯,这取决于:对于开发,早期绑定可以帮助很多人(智能感知等),特别是对那些没有经验的开发人员来说,他们并不太了解库的对象模型。当然,为了部署,切换到后期绑定可以节省很多麻烦。 – Heinzi 2011-04-29 05:34:23

+0

我致力于为客户提供简单可靠的服务。有时这意味着我作为开发人员必须更加努力地工作。 – 2011-04-30 19:01:57

0

如果电子邮件总是封闭在最后<>你可以

Public Function fmt(email As String) As String 
pos = InStrRev(email, "<") 
If (pos > 0) Then 
    email = Mid$(email, 1 + pos, 1 + Len(email) - pos) 
    email = Left$(email, Len(email) - 1) 
End If 
fmt = email 
End Function 

replace(mid(email,instrrev(email,"<")+1,len(email)),">","") 

编辑;

对于正则表达式检查,添加对“Microsoft VBScript正则表达式库”(工具>引用)的引用;

Public Function fmt(email As String) As String 
pos = InStrRev(email, "<") 
If (pos > 0) Then 
    email = Mid$(email, 1 + pos, 1 + Len(email) - pos) 
    email = Left$(email, Len(email) - 1) 
End If 
fmt = email 
With New RegExp 
    .Global = True 
    .IgnoreCase = True 
    .MultiLine = True 
    .Pattern = "^\[email protected]\S+\.\S+$" 
    If Not .Test(fmt) Then fmt = "" 
End With 
End Function 

这将返回一个有效的电子邮件地址,或者“”如果它无效。

我放弃了你的RE;推理:Using a regular expression to validate an email address

+0

感谢您的回复! 这就是从Outlook直接粘贴的东西,它会在'<>'中,但有时用户会尝试不输入任何内容,有时候它会被正确输入。我正在寻找一个我认为涵盖所有基地的子/功能。但也许你的解决方案可以使用,我只是不知道如何实现它? – BOOMERANG 2011-04-28 15:45:48

+0

更新后的帖子 – 2011-04-28 16:04:11

+1

最好使用RegEx库的后期绑定,你不觉得吗? – 2011-04-29 02:36:36

相关问题