我正在编写一个VBA函数来评估String是否是有效的全名。例如:
David Gilmour
Juan Munoz
Claudio Alberto da Silva
David Gilm01ur Jr。
JuanMuñoz
CláudioAlbertoda Silva
所以我的函数代码是这样的:
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
为什么会出现这个问题或者我犯了什么错误?
答案 0 :(得分:2)
您需要使用
^[a-zA-Z]+(?:\s[a-zA-Z]+)*$
请参阅regex demo
设置regularExpressions.Global = False
。
<强>详情:
^
- 字符串开头[a-zA-Z]+
- 一个或多个ASCII字母(?:
- 开始匹配零个或多个(*
)序列的非捕获组:
\s
- 一个空格(在{1}之后添加{1}}以匹配一个或多个空格)+
[a-zA-Z]+
- 非捕获组的结束)*
- 字符串结束。