只用一个Session解决购物车(3)

发表于:2007-06-30来源:作者:点击数: 标签:
The RegExpItem() 函数 这也是一个私有函数,它有两个参数,一个是要处理商品名称字符串,一个是要执行的指令:增加或减少,即增加或减少某个商品的数量。是增加还是减少由调用它的函数决定,即传递过来的参数是raise(增加)还是(lower)。下面让我们来看看这
  The RegExpItem() 函数

  这也是一个私有函数,它有两个参数,一个是要处理商品名称字符串,一个是要执行的指令:"增加"或"减少",即增加或减少某个商品的数量。是增加还是减少由调用它的函数决定,即传递过来的参数是raise(增加)还是(lower)。下面让我们来看看这个函数:


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


  这个函数有两个参数,argString and argAction,(译者注:以下内容涉及VBSCRIPT中REGEXP对象(正则表达式对象)的知识,关于REGEXP的详细介绍请看http://www.eschool.com.cn/document/20001011/2000101111063201.shtml)。函数首先用EXECUTE方法,在argString参数中按正则表达式模式搜索出符合条件的字串,即把除产品数量以外的内容提取出来,然后把提取出来的字串保存在变量strString中备用。之后再执行一次类似的操作把参数argString中的数字,即商品数量提取出来,保存在变量intQty中。

  根据第二个参数是raise(增加)还是lower(减少),函数决定变量intQty进行加1还是减1的操作。然后把变量strString、"("、变量intQty和")"连接起来,返回一个新的字符串:strNewString。

  我在写这个函数第一版的时候,只使用了VBSCRIPT的字符串函数,主要是split() 和 join()。这个版本工作的很好,但是代码看起来不很漂亮,而且也不如用REGEXP对象简单易用。因为我没有对两个版本进行过比较,所以我不能说出哪个版本效率更高,但是我听说使用split() 和 join()应该更快一些。

  这段代码的特色是非常容易改编。如果你想校验数据的合法性,比如说商品ID号或商品名称,都可以用这段代码。正则表达式"[0-9]+"只与数字匹配,比如说商品ID或商品数量。而另一个正则表达式模式 "[^\(\)0-9]+"与除数字和逗号的字符匹配。 (待续)

原文转自:http://www.ltesting.net