2011-04-28 40 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

相關問題