2010-12-17 20 views
0

私は次の関数が浄化されたタグのリストを出力すると期待していますが、代わりに元のリストをそのまま出力します。予想されるように、各反復でlocal.iをダンプ、しかし、消毒タグを示していますこのサニタイズ機能の出力は何故変わらないのですか?

<cfset this.tags = "[email protected]%^-tag, anothersf-taggame, SDFSFtagged"> 

<cfset local.listPosition = 0> 

<cfloop list="#this.tags#" index="local.i"> 
    <cfset local.i = ReReplace(local.i, "[^a-z0-9+##\-.]", "", "All")> 
    <cfset local.listPosition = local.listPosition + 1> 
    <cfset ListSetAt(this.tags, local.listPosition, local.i, ", ")> 
</cfloop> 

<cfoutput> 
    #this.tags# 
</cfoutput> 

この奇妙な行動が起こっている理由を任意のアイデア? ListSetAt()関数は新しい値をリストに追加しないでくださいが、なぜですか?

答えて

6

listSetAt()はリストを変更しません。変更を加えたリストのコピーが返されるので、割り当てを行う必要があります。

ここでは最適化がたくさんあるようです。なぜあなたはリストをループしていますか?正規表現でコンマを使用できるように見える場合、このループと同じ結果が得られます。

+0

私はベンに同意し、私はそれを完全にリファクタリングしました。私はループからregExを削除し、local.listPositionを取り除き、ループの後にリストを設定するだけです。見た目は検証のためのものですが、私の例からは除外されています。 – Mohamad

関連する問題