Как использовать подстановочный знак в isDefined () или structKeyExists () в URL? - PullRequest
2 голосов
/ 09 февраля 2012

Я использую 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;
}

Но это не так просто.Мои люди хотят иметь возможность передавать другие похожие свойства, например:

myiq.reg_confirm
myiq.reg_password
myiq.reg_save

Мне нужно иметь возможность программировать их для работы с любой страницей регистрации, которую они могут создать в будущем.По сути, мне нужно что-то вроде этого:

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

Обратите внимание на WILDCARD после «myiq.reg».Я пробовал это, но это не работает.

Как мне кодировать это так, чтобы любая страница, доступ к которой имеет свойство URL, которое начинается с "myiq.reg", игнорировалось?

Ответы [ 2 ]

8 голосов
/ 09 февраля 2012

Вы можете получить structKeyList () из области видимости URL и просто найти в ней регулярное выражение.Что-то вроде:

reFindNoCase("(?:^|,)myiq\.reg", structKeyList(URL))

(только поверхностно протестировано)

Вы могли бы немного улучшить регулярное выражение, если хотите более точно сопоставить фактические шаблоны имен переменных, а не только любое вхождение myiq.regв строке.

1 голос
/ 10 февраля 2012

Что-то вроде этого возможно ...

res = '';
params = StructKeyList(url);
for(i=1; i lte ListLen(params); i++) {
  param = listGetAt(params, i);
  if (CompareNoCase(Left(param, 8), 'myiq.reg') eq 0) {
    res = param;
    break;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...