如何在URL中的isDefined()或structKeyExists()中使用通配符?

Evi*_*mes 2 regex coldfusion

我正在使用ColdFusion 8.0.1.

我正在应用程序文件中编写一些代码来查看URL.如果传递了某种类型的属性,我不想更新SESSION结构中的属性.

基本上,如果访问者访问与我们的注册过程有关的任何页面,我们不希望更新SESSION.UserInfo.ReturnToURL变量.对于他们访问的每个其他页面,我们都想更新变量.

所有与注册过程有关的页面都会在URL中包含"myiq.reg".如果是这种情况,我会使用下面的代码.

// DETERMINE WHETHER TO UPDATE RETURNTOURL
if (not structKeyExists(URL, "myiq.reg")) {
    URLString = "http://" & CGI.SERVER_NAME & CGI.SCRIPT_NAME & CGI.QUERY_STRING;
    SESSION.UserInfo.ReturnToURL = URLString;
}
Run Code Online (Sandbox Code Playgroud)

但事情并非那么简单.我的人希望能够传递其他类似的属性,如下所示:

myiq.reg_confirm
myiq.reg_password
myiq.reg_save
Run Code Online (Sandbox Code Playgroud)

我需要能够对这些软代码进行软编码以适应他们将来可能创建的任何注册页面.基本上,我需要这样的东西:

if (not structKeyExists(URL, "myiq.reg*")) {
    SESSION.UserInfo.ReturnToURL = URLString;
}
Run Code Online (Sandbox Code Playgroud)

注意"myiq.reg"之后的WILDCARD.我试过这个,但它不起作用.

如何对此进行编码,以便忽略以"myiq.reg"开头的URL属性访问的任何页面?

Ada*_*ron 8

你可以得到一个URL范围的structKeyList(),然后在那里做一个正则表达式.就像是:

reFindNoCase("(?:^|,)myiq\.reg", structKeyList(URL))
Run Code Online (Sandbox Code Playgroud)

(仅经过表面测试)

如果你想更准确地匹配实际的变量名模式而不是字符串中任何出现的myiq.reg,你可以稍微改进正则表达式.