В зависимости от того, как работает эта «система на заказ»:
- Использование: для объединения множества операторов в строке
- Добавить функцию в базу кода системы и вызвать ее наline
- Добавьте 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
-------------------------------------------------------------------------------