2011-01-14 43 views
8

私はIDのリストをURLに渡しています。これらのIDに基づいてクエリを実行する前に、いくつかのサニタイズを行いたいと思います。私はこれを持っています:Coldfusion - 数値以外の値をすべてリストから削除しますか?

<cfset URL.ID = ReReplaceNoCase(URL.ID,"[^0-9]","","ALL")> 

しかし、私はコンマも取り除いていることを理解しています。 Coldfusionのリストから数値以外の値を削除する簡単な方法はありますか?

答えて

20

あなたの正規表現にコンマを追加するだけではどうですか?

<cfset URL.ID = ReReplaceNoCase(URL.ID,"[^0-9]","","ALL")> 

正規表現はまだ代わりに、私は整数の検証でループを使用すると思い、文字列内の余分なカンマを残し、一部の数字を受け入れ
<cfset URL.ID = ReReplaceNoCase(URL.ID,"[^0-9,]","","ALL")> 
+0

doh!ありがとう! (私はできるだけ早くこの答えを受け入れます) – jyoseph

+0

好奇心、一度URL.ID(余分なカンマを含む)を整理すると、それを構造体にスローし、次に配列に格納してから、配列のリストをクリーンアップすることができますコンマ?これは3-4行のコード(正規表現を含む)を必要とします。 – HPWD

3

次のようになります。

<cfset url.id = "100,abc,102z,eee,22.5,773"> 
<!--- 100,,102,,225,773 ---> 
<cfoutput>#ReReplaceNoCase(URL.ID,"[^0-9,]","","ALL")#<br /></cfoutput> 

<cfset dirtyIds = listToArray(url.id)> 
<cfset cleanIds = []> 
<cfloop array="#dirtyIds#" index="dirtyId"> 
    <cfif isValid("integer",dirtyId)><cfset arrayAppend(cleanIds, dirtyId)></cfif> 
</cfloop> 
<cfset url.id = arrayToList(cleanIds)> 
<!--- 100, 773 ---> 
<cfoutput>#url.id#</cfoutput> 
4
<cfscript> 
//Test Case 
URL.ID= "abc,12,3,zoiui fdsoaiu ,323333"; 

//URL.ID= "12,3,323333" 
URL.ID= reReplace(URL.ID , "([^0-9,]+,)" , "" , "all"); 

</cfscript> 

あなたにこれを入れたいと言われています<cfqueryparam .. list= "true" />

+0

+1この正規表現の仕事は@Sean Coyneよりも優れています。私の例では正しく動作します。 – orangepips

+0

これをもう一度見てください。問題があります。末尾にカンマがあることを前提としています。 reReplace(URL.ID& "、" ..)とそれは世話をします –

0

@orangepips

isNumeric()も同様に動作します。

<cfset url.id = "100,abc,102z,eee,22.5,773"> 
<cfset variables.newlist = ''> 
<cfloop list="#url.id#" index="i"> 
    <cfif isNumeric(i)> 
     <cfset variables.newlist = ListAppend(variables.newlist,i)> 
    </cfif> 
</cfloop> 
<cfoutput>#variables.newlist#</cfoutput> 
関連する問題