在處理文字資料時,我們總會碰到各種輸入錯誤的問題,Excel中雖然有內建了各種「資料驗證」的作法,但需求總是比內建的多,例如判斷email位址是否正確,這在Excel 2003並沒有內建,此時就要出動更強大的判別方式,我們搬出了「正規表達式」來實現這個功能。
以下是我們的自訂函數:
Function fncIsMail(ByVal strEmail As String) As Boolean
Dim objRegEx As Object
Dim strRFC2822_3 As String
strRFC2822_3 = "^([a-zA-Z0-9_\-\.]+)@(([a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3}))|(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d))$"
On Error GoTo ErrZone
Set objRegEx = CreateObject("Vbscript.Regexp")
With objRegEx
.Pattern = strRFC2822_3
.IgnoreCase = True
fncIsMail = .test(strEmail)
End With
ErrZone:
Set objRegEx = Nothing
If Err.Number <> 0 Then
Debug.Print "錯誤 " & Err.Number & ": " & Err.Description
End If
End Function
主要是使用VBscript.Regexp的函數庫來達成,透過該函數庫與模板(Pattern)判斷提供字串是否為email字串,若是的話返回True,否為False。
以下圖片為使用該函數來判斷e-mail的實際狀況,有問題的email都會變成FALSE。
參考資料:
正規表達式(維基百科)
Emial字串檢查方法與解說
正規表達式 資料庫