2016-05-12 6 views
0

Я пытаюсь найти строку, чтобы убедиться, что она не содержит чисел, за которыми следует запятая, за которой следуют цифры, и содержит точку и 2 десятичных знака, например. 32,000.00. На данный момент у меня есть поиск, чтобы увидеть, содержит ли строка только точку. Как я могу найти критерии выше?Проверка строки vbscript

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

Использование регулярное выражение. – Lankymart

ответ

3

Я считаю, что простое регулярное выражение тест даст вам то, что вы хотите:

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 

выше приведет булевой ответ (True/False). адаптируя его к вашей обычной ...

Set objRegEx = CreateObject("VBScript.RegExp") 
objRegEx.IgnoreCase = True 
objRegEx.Global = True 
objRegEx.MultiLine = True 
objRegEx.Pattern = "\d+\,\d+\.\d{2}" 

Root_RefundAmount = Root_TaxDataSummary.SlvObject("RefundAmount").GetROProperty("text") 
If Not objRegEx.test(Root_RefundAmount) Then   
    'Pattern NOT Found 
Else 
    'Pattern IS Found 
End If 

Для объяснения Строчка:

"\d+\,\d+\.\d{2}" 

\ d = любой номер от 0 до 9 ...

«А число сопровождаемых запятой за которыми следуют цифры и содержащие точку и 2 десятичные знаки "{Предположим, вы имеете в виду 2 числа} ... В зависимости от вашего ввода, это намного проще смотреть, но оно также будет соответствовать номерам, таким как 12345,12345.99, которые могут или не могут желательно.

Если вам нужно, чтобы быть точным, то вы можете рассмотреть ниже Regex:

"\d{1,3}(?:\,\d{3})*\.\d{2}" 

Это будет соответствовать число от 0,00 до 999,999,999.99 и т.д., в типичном цифровом формате ...

Если вы хотите специально искать чисел выше 1000 (с Comma) Затем измените Star «*» в плюс «+» означает один или больше Обязательны ...

"\d{1,3}(?:\,\d{3})+\.\d{2}" 

или еще более с pecific Regex:

(?:[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' класса Character, Пожалуйста, обратите внимание на ссылки ниже:

http://www.regular-expressions.info/shorthand.html

https://msdn.microsoft.com/en-us/library/20bw873z(v=vs.110).aspx#Anchor_9

+0

Это регулярное выражение не будет соответствовать '32,000.00'. См. [Демонстрация] (https://www.debuggex.com/r/dMWcM2UCr47Z2Mq4) – Lankymart

+0

Самое близкое регулярное выражение, которое я могу получить, это '^ [0-9] {1,3} \, (?: \,? [0-9 ] {3}) * (?: \. [0-9] {2})? $ 'И даже это неправильно. – Lankymart

+0

@ Lankymart Технически мое регулярное выражение будет соответствовать части «2 000,00». Я добавил '+' к классу символов \ d, который бы соответствовал всем этим. Из того, что я собрал из вопроса OP, они просто хотят убедиться, что число в определенном формате не существует в пределах значения. Неужели я пропустил вопрос? –