The RegExpItem() 函數(shù)
這也是一個私有函數(shù),它有兩個參數(shù),一個是要處理商品名稱字符串,一個是要執(zhí)行的指令:"增加"或"減少",即增加或減少某個商品的數(shù)量。是增加還是減少由調(diào)用它的函數(shù)決定,即傳遞過來的參數(shù)是raise(增加)還是(lower)。下面讓我們來看看這個函數(shù):
Private Function RegExpItem(argString, argAction) dim objRegExp, objMatches dim strString, strNewString dim intQty Set objRegExp = New RegExp objRegExp.Pattern = "[^\(\)0-9]+" objRegExp.IgnoreCase = True objRegExp.Global = True Set objMatches = objRegExp.Execute(argString) strString=objMatches.Item(0) objRegExp.Pattern = "[0-9]+" objRegExp.IgnoreCase = True objRegExp.Global = True
Set objMatches = objRegExp.Execute(argString) if objMatches.Count=0 then intQty=1 else intQty=objMatches.Item(0) end if
Select Case argAction Case "lower" if intQty>1 then strNewString=strString & "(" & (intQty-1) & ")" elseif intQty=0 then strNewString=strString else strNewString="" end if Case "raise" strNewString=strString & "(" & (intQty+1) & ")" End Select RegExpItem = strNewString End Function
這個函數(shù)有兩個參數(shù),argString and argAction,(譯者注:以下內(nèi)容涉及VBSCRIPT中REGEXP對象(正則表達(dá)式對象)的知識,關(guān)于REGEXP的詳細(xì)介紹請看http://www.eschool.com.cn/document/20001011/2000101111063201.shtml)。函數(shù)首先用EXECUTE方法,在argString參數(shù)中按正則表達(dá)式模式搜索出符合條件的字串,即把除產(chǎn)品數(shù)量以外的內(nèi)容提取出來,然后把提取出來的字串保存在變量strString中備用。之后再執(zhí)行一次類似的操作把參數(shù)argString中的數(shù)字,即商品數(shù)量提取出來,保存在變量intQty中。
根據(jù)第二個參數(shù)是raise(增加)還是lower(減少),函數(shù)決定變量intQty進(jìn)行加1還是減1的操作。然后把變量strString、"("、變量intQty和")"連接起來,返回一個新的字符串:strNewString。
我在寫這個函數(shù)第一版的時候,只使用了VBSCRIPT的字符串函數(shù),主要是split() 和 join()。這個版本工作的很好,但是代碼看起來不很漂亮,而且也不如用REGEXP對象簡單易用。因為我沒有對兩個版本進(jìn)行過比較,所以我不能說出哪個版本效率更高,但是我聽說使用split() 和 join()應(yīng)該更快一些。
這段代碼的特色是非常容易改編。如果你想校驗數(shù)據(jù)的合法性,比如說商品ID號或商品名稱,都可以用這段代碼。正則表達(dá)式"[0-9]+"只與數(shù)字匹配,比如說商品ID或商品數(shù)量。而另一個正則表達(dá)式模式 "[^\(\)0-9]+"與除數(shù)字和逗號的字符匹配。 (待續(xù))
|