Конденсировать тестирование VBScript Regex в одну строку? - PullRequest
1 голос
/ 02 августа 2011

Я почти уверен, что уже знаю ответ на этот вопрос, но мой VBScript очень ржавый, поэтому я надеюсь, что он окажется неверным.

Я использую сделанную на заказ систему, которая использует VBScript для оценкипроверка по полям формы.Проблема в том, что VBScript может существовать только в одной строке и должен возвращать логическое значение.

Это хорошо для проверки длины строки и наличия конкретной строки в строке, но мне нужно выполнить некоторое регулярное выражениепроверяет.

Итак, мой вопрос, есть ли способ сжать следующее до одной строки?

Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "^[\w\s]*$"
myRegExp.Test("Test St*ring")

Пример, вероятно, выживет без свойств IgnoreCase и Global.

Заранее спасибо,

Богат

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

В зависимости от того, как работает эта «система на заказ»:

  1. Использование: для объединения множества операторов в строке
  2. Добавить функцию в базу кода системы и вызвать ее наline
  3. Добавьте COM-компонент (.wsc) в системную среду и вызовите его метод .Validate в строке

POC для # 3 - все, что вам нужно, это любовь - не яозначают возможность поставить на компьютер символ .wsc:

<?xml version="1.0"?>
<component>
<registration
    description="wsc trial"
    progid="Trial.WSC"
    version="1.00"
    classid="{F17637AC-48F0-4C02-9A88-D06741FFA58F}"
>
</registration>
<public>
    <method name="vld">
        <PARAMETER name="sTxt"/>
    </method>
</public><script language="VBScript">
<![CDATA[
Function vld( sTxt )
  Dim reVld : Set reVld = New RegExp
  reVld.IgnoreCase = True
  reVld.Global = True
  reVld.Pattern = "^[\w\s]*$"
  vld = reVld.Test( sTxt )
End Function
]]>
</script></component>

и строку

GetObject("script:<full path to\trial.wsc").vld( "Test St*ring" )

в этой строке.Тестовый скрипт:

' Assuming the 'bespoke system' evals the string you put on the line
Dim aTests : aTests = Array( _
       "Set reVld = New RegExp : reVld.IgnoreCase = True : reVld.Global = True : reVld.Pattern = ""^[\w\s]*$"" : reVld.Test(""Test St*ring"")" _
     , "vld( ""Test St*ring"" )" _
     , "GetObject(""script:E:\trials\SoTrials\answers\6907380\vbs\trial.wsc"").vld( ""Test St*ring"" )" _
     , "GetObject(""script:E:\trials\SoTrials\answers\6907380\vbs\trial.wsc"").vld( ""nice data"" )" _
)
WScript.Echo String( 79, "-" )
Dim sToEval
For Each sToEval In aTests
    Dim vVld : vVld = "Bingo"
  On Error Resume Next
    vVld = Eval( sToEval )
    If 0 <> Err.Number Then vVld = Err.Description
  On Error GoTo 0
    WScript.Echo Join( Array( _
         "to eval: " & sToEval _
       , "result:  " & CStr( vVld ) _
       , String( 79, "-" ) _
    ), vbCrLf )
Next   

Function vld( sTxt )
  Dim reVld : Set reVld = New RegExp 
  reVld.IgnoreCase = True 
  reVld.Global = True 
  reVld.Pattern = "^[\w\s]*$" 
  vld = reVld.Test( sTxt ) 
End Function

вывод:

cscript 6907380.vbs
-------------------------------------------------------------------------------
to eval: Set reVld = New RegExp : reVld.IgnoreCase = True : reVld.Global = True : reVld.Pattern = "^[\w\s]*$"
: reVld.Test("Test St*ring")
result:  Syntax error
-------------------------------------------------------------------------------
to eval: vld( "Test St*ring" )
result:  False
-------------------------------------------------------------------------------
to eval: GetObject("script:E:\trials\SoTrials\answers\6907380\vbs\trial.wsc").vld( "Test St*ring" )
result:  False
-------------------------------------------------------------------------------
to eval: GetObject("script:E:\trials\SoTrials\answers\6907380\vbs\trial.wsc").vld( "nice data" )
result:  True
-------------------------------------------------------------------------------
1 голос
/ 02 августа 2011

Вы пробовали:

Set myRegExp = New RegExp : myRegExp.IgnoreCase = True : myRegExp.Global = True : myRegExp.Pattern = "^[\w\s]*$" : myRegExp.Test("Test St*ring")

Источник: http://technet.microsoft.com/en-us/library/ee176989.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...