1
我正在寫一個VBA函數來評估一個字符串是否是一個有效的全名或不。例如:RegExp測試全名不按預期工作
- 有效的完整名稱:
大衛·吉爾摩
胡安·穆尼奧斯
克勞迪奧·阿爾貝託·達席爾瓦
- 富無效LL名稱:
大衛Gilm01ur小
胡安·穆尼奧斯
克勞迪奧阿爾貝託·達席爾瓦
所以我的函數的代碼是這樣的:
Function isVálidoNome(ByVal Texto As String) As Boolean
isVálidoNome = False
'
Dim strPattern As String: strPattern = "(^[a-zA-Z]+(\s?[a-zA-Z])*)*"
'Dim strPattern As String: strPattern = "\d"
Dim regularExpressions As New RegExp
'
regularExpressions.Pattern = strPattern
regularExpressions.Global = True
'
If (regularExpressions.Test(Texto)) Then
isVálidoNome = True
End If
End Function
我使用的模式(^[a-zA-Z]+(\s?[a-zA-Z])*)*
在我用來測試它的應用程序(RegexPal)中工作正常,但是當我在VBA中運行代碼時,字符串與數字,重音符號返回true
爲什麼這個問題或者我犯了什麼錯誤?
男人,它的工作......但我仍然認識到:當我需要一個正則表達式表達式取決於另一個,我必須使用'(?:',這是問題的原因,對吧? – tdmsoares
'(?:...)'只是一個非*捕獲組。它與捕獲的一樣('(...)'),但不創建'.Submatches'。只需使Match對象的內部結構更清潔即可。 –
對我的問題抱歉,但是捕捉組和非捕捉組之間有什麼區別?我讀過它,但我仍然困惑 – tdmsoares