用过PHP的朋友都知道PHP中变量的使用灵活方便特别是能在字符串中方便实现变量名-值变换使得整个PHP代码更显简洁优美比如一条更新数据库的SQL语句只需写成"update users set password=$password group=$group name=$username where account=$account"其中的$password$group$username$account便会被实际的变量值替换而在ASP中要实现相同的功能必须写成"update useres set password=" & password & "group=" & group & "name=" & username & " where account=" & account & ""显得冗长难看如果这是一条insert语言而且插入的字段内容很多的话那么查看字段与values的对应关系将会是一个痛苦的过程
现在让我们看看如何在ASP实现类似的变量名-值变换
思路
首先必须有一个方法把需要用实际值替换的变量名与普通的文本区分出来然后把所有找到的变量名用它所代表的实际值替换掉
对于第一点可以通过正则表达式查找得到这里我们不采用PHP的变量表示方式而采用大托号{}作为变量名的边界符字符串表示变为password={password}group={group}
第二点是变量名-值变换的关键通过变量名得到变量值查看ASP资料没有找到直接实现的方法但有一个函数Execute引起我们的注意从资料说明中可知Execute可以执行传入的有效的字符串作为代码执行同这样只要编写一个小函数就可以实现我们的要示核心代码为
function GetVar(var_name)
Execute("function get_value(): get_value=" & var_name & ": end function")
getvar=get_value()
end function
实现
完整代码
function GetVar(var_name)
Execute("function get_value(): get_value=" & var_name & ": end function")
getvar=get_value()
end function
function TxtValue(str level)
dim regEx Matches Result
Set regEx = new RegExp
select case level
case regExPattern = "{(w+)}" 变量名有效
case regExPattern = "{([w+*/<>=]+)}" 变量名及运算符有效
case regExPattern = "{([ws]+)}" 除换行符外的所有字符有效
case else exit function
end select
regExPattern = "{(w+)}"
regExIgnoreCase = true
regExGlobal = true
Set Matches = regExExecute(str)
Result = str
responsewrite MatchesCount
For Each Match In Matches
Result = Replace(Result MatchValue GetVar(MatchSubMatches()))
Next
set Matches = nothing
set regEx = nothing
TxtValue = Result
end function
function VarValue(var_name)
VarValue = TxtValue(var_name )
end Function
调用方法
VarValue("update users set password={password} group={group} name={username} where account={account}"
VarValue调用了TxtValueTxtValue找出所有变量名交调用GetVar得到变量值并进行替换实际上直接调用TxtValue(str)还允许对字符串值进行四则运算