2012-02-09 8 views
2

私はColdFusion 8.0.1を使用しています。isDefined()またはstructKeyExists()でワイルドカードを使用する方法

私はURLを見るアプリケーションファイルに少しのコードを書いています。特定のタイプのプロパティのいずれかが渡された場合、私はSESSION構造体のプロパティを更新したくありません。

基本的に、訪問者がGoogleの登録プロセスと関係があるページにアクセスする場合、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; 
} 

"myiq.reg"の後にWILDCARDがあることに注意してください。私はこれを試しましたが、うまくいきません。

「myiq.reg」で始まるURLプロパティでアクセスするすべてのページが無視されるようにするにはどうすればよいですか?

答えて

8

URLスコープのstructKeyList()を取得して、その中でregex findを実行します。ような何か:

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

(表面的にしかテスト)

あなたがより正確ではなく、文字列でmyiq.regのただの発生よりも、実際の変数名のパターンにマッチしたい場合は、正規表現を少し向上させることができます。おそらく、このような

+0

ありがとう! –

1

何か...詳細について

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; 
    } 
} 
+0

ありがとうございますが、少し冗長すぎます。 –

関連する問題