RegExp测试全名不能按预期工作

时间:2017-06-05 13:39:09

标签: regex vba ms-access

我正在编写一个VBA函数来评估String是否是有效的全名。例如:

  • Válid全名:
  

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

为什么会出现这个问题或者我犯了什么错误?

1 个答案:

答案 0 :(得分:2)

您需要使用

^[a-zA-Z]+(?:\s[a-zA-Z]+)*$

请参阅regex demo

设置regularExpressions.Global = False

<强>详情:

  • ^ - 字符串开头
  • [a-zA-Z]+ - 一个或多个ASCII字母
  • (?: - 开始匹配零个或多个(*)序列的非捕获组:
    • \s - 一个空格(在{1}之后添加{1}}以匹配一个或多个空格)
    • +
  • [a-zA-Z]+ - 非捕获组的结束
  • )* - 字符串结束。