开发者

Condense VBScript Regex test to one line?

开发者 https://www.devze.com 2023-03-24 06:00 出处:网络
I\'m almost certain I already know the answer to this one, but my VBScript is very rusty so I\'m hoping to be proved wrong.

I'm almost certain I already know the answer to this one, but my VBScript is very rusty so I'm hoping to be proved wrong.

I am using a bespoke system that uses VBScript to evaluate validation on form fields. The problem is that the VBScript can only exist on one line and must return a boolean.

This is fine for checking string lengths and the existence of a specific string within a string, but I need to perform some regular expression checks.

So my question is, is there any way to condense the following to one line?

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

The example would probably survive without the IgnoreCase and Global properties.

开发者_Go百科Thanks in advance,

Rich


Depending on how this 'bespoke system' works:

  1. Use : to combine many statements on the line
  2. Add a function to the system's code base and call it on the line
  3. Add a COM component (.wsc) to the system's environment and call its .Validate method on the line

POC for #3 - all you need is love - no I mean the ability to put a .wsc like:

<?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>

on the computer and the line

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

in that one line. Test script:

' 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

output:

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
-------------------------------------------------------------------------------


Did you try:

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

Source: http://technet.microsoft.com/en-us/library/ee176989.aspx

0

精彩评论

暂无评论...
验证码 换一张
取 消