Vbscript 验证字符串脚本

Vbscript 验证字符串脚本,vbscript,hp-uft,Vbscript,Hp Uft,我正在尝试搜索字符串,以确保它不包含后跟逗号的数字,也不包含一个点和两个小数位,例如32000.00。目前,我让它搜索字符串是否只包含一个点。如何搜索上述条件 Root_RefundAmount = Root_TaxDataSummary.SlvObject("RefundAmount").GetROProperty("text") refund = InStr(1,Root_RefundAmount,".") If refund > 0 Then pass

我正在尝试搜索字符串,以确保它不包含后跟逗号的数字,也不包含一个点和两个小数位,例如32000.00。目前,我让它搜索字符串是否只包含一个点。如何搜索上述条件

Root_RefundAmount = Root_TaxDataSummary.SlvObject("RefundAmount").GetROProperty("text") 
refund = InStr(1,Root_RefundAmount,".")
If refund > 0 Then          
    pass
Else
   fail
End If

我相信一个简单的正则表达式测试将为您提供您想要的:

Dim objRegEx, strValue

'Create Regular Expression object to parse the file
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.IgnoreCase = True
objRegEx.Global = True
objRegEx.MultiLine = True
objRegEx.Pattern = "\d+\,\d+\.\d{2}"

strValue = "e.g. 32,000.00."
MsgBox objRegEx.test(strValue)  '<- True

strValue = "e.g. 3200000."
MsgBox objRegEx.test(strValue)  '<- False
要解释这种模式:

"\d+\,\d+\.\d{2}"
\d=任何数字0到9

“一个数字,后跟一个逗号,后跟数字,并包含一个点和两个小数位”{假设你的意思是2个数字}。。。根据您的输入,上面的内容更容易查看,但它也会与1234512345.99等数字匹配,这些数字可能是可取的,也可能不是可取的

如果您需要精确,那么您可能需要考虑下面的正则表达式:

"\d{1,3}(?:\,\d{3})*\.\d{2}"
这将以典型的数字格式匹配0.00到99999999.99等数字

如果您想特别查找1000以上的数字(用逗号),则将星号“*”改为加号“+”,表示需要一个或多个

"\d{1,3}(?:\,\d{3})+\.\d{2}"
或者对于更具体的正则表达式:

(?:[1-9]|[1-9][0-9]|[1-9][0-9]{2})(?:\,[0-9]{3})+\.[0-9]{2}
'OR
(?:[1-9]|[1-9]\d|[1-9]\d{2})(?:\,\d{3})+\.\d{2}
有关正则表达式和“\d”字符类的更多信息,请查看以下链接:


使用正则表达式。该正则表达式将不匹配
32000.00
。请看,我能得到的最接近的正则表达式是
^[0-9]{1,3}\,(?:\,?[0-9]{3})*(?:\.[0-9]{2})?$
,即使这样也不对。@Lankymart从技术上讲,我的正则表达式将匹配'2000.00'部分。我在\d字符类中添加了一个“+”,它将匹配所有字符。根据我从OP的问题中收集的信息,他们只是想确保某个值中不存在某种格式的数字。我没有读到这个问题吗?最新的正则表达式,肯定更接近,但它不会匹配像
11456001.00
这样的东西。然而,这应该是
(?:[1-9]|[1-9][0-9]|[1-9][0-9]{2})(?:\,[0-9][0-9]{2})+\.[0-9]{2}
@Lankymart好捕。应改为“[0-9]{3}”。我编辑了我的回复,它正确地匹配了那个数字。
(?:[1-9]|[1-9][0-9]|[1-9][0-9]{2})(?:\,[0-9]{3})+\.[0-9]{2}
'OR
(?:[1-9]|[1-9]\d|[1-9]\d{2})(?:\,\d{3})+\.\d{2}