用于检查特殊符号的VBA regexp

用于检查特殊符号的VBA regexp,regex,vba,testing,Regex,Vba,Testing,我试着用我在这里学到的东西, 现在我想编写一个RegExp来检查字符串是否包含数字和逗号。例如,“1,2,55,2”应该可以,而“a,2,55,2”或“1.2,55,2”应该测试失败。我的代码: Private Function testRegExp(str, pattern) As Boolean Dim regEx As New RegExp If pattern <> "" Then With regEx .Global

我试着用我在这里学到的东西, 现在我想编写一个RegExp来检查字符串是否包含数字和逗号。例如,“1,2,55,2”应该可以,而“a,2,55,2”或“1.2,55,2”应该测试失败。我的代码:

Private Function testRegExp(str, pattern) As Boolean
    Dim regEx As New RegExp

    If pattern <> "" Then
        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .pattern = pattern
        End With

        If regEx.Test(str) Then
            testRegExp = True
        Else
            testRegExp = False
        End If
    Else
        testRegExp = True
    End If
End Function

Public Sub foo()
    MsgBox testRegExp("2.d", "[0-9]+")
End Sub
私有函数testRegExp(str,pattern)作为布尔值
Dim regEx作为新的RegExp
如果模式为“”,则
用正则表达式
.Global=True
.MultiLine=True
.IgnoreCase=False
.模式
以
如果正则表达式测试(str),则
testRegExp=True
其他的
testRegExp=False
如果结束
其他的
testRegExp=True
如果结束
端函数
公共分区办事处()
MsgBox testRegExp(“2.d”,“[0-9]+”)
端接头

MsgBox生成true而不是false。有什么问题吗?

您的正则表达式匹配一个部分字符串,它匹配所有
55,2
a,2,55,2
1.2,55,2
输入字符串中的一个数字

使用锚定
^
$
强制执行完整的字符串匹配,并在字符类中添加逗号,正如您所说,要匹配仅包含数字和逗号的字符串:

MsgBox testRegExp("2.d", "^[0-9,]*$")
                          ^    ^  ^
我还建议使用
*
量词匹配0个或多个匹配项,而不是
+
(1个或多个匹配项),但这需要您自己决定(是否允许空字符串匹配)

这是。注意,它是用于PCRE正则表达式风格的,但该正则表达式在VBA中的性能类似

是的,正如建议的那样,如果不需要匹配字符串/行本身,则另一种方法是匹配反向字符类:

MsgBox testRegExp("2.d", "[^0-9,]")

这样,
[^0-9,]
将匹配除逗号/数字以外的任何字符,从而使字符串无效。如果结果为
True
,则表示字符串包含除数字和逗号以外的字符。

您可以使用有限的内置模式匹配:

function isOk(str) As boolean
    for i = 1 To len(str)
        if Mid$(str, i, 1) Like "[!0-9,]" then exit function
    next
    g = True and Len(str) > 0
end function

或者,使用非数字或逗号的任何字符的部分匹配的倒数,即:[^0-9,]。您需要反转返回值。@Chaz:我假设OP需要匹配字符串,但查看代码,很明显OP对匹配/无匹配结果感兴趣。
[0-9,]*$
可以在strng结尾匹配。因此,它将在
dew%$%\9,
string中找到匹配项。你写了你需要匹配只包含数字和逗号的字符串,对吗
^[0-9,]*$
是它的正确正则表达式。如果只想检查字符串是否还有其他内容,请使用
[^0-9,]
进行检查。或者,在给定特定字符串的情况下,精确地获取所需的内容。正如您所解释的,这都是关于^和$。