2011-01-14 42 views
8

我有一個通過URL傳遞的ID列表。我想在運行基於這些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 2011-01-14 19:43:16

+0

好奇,一旦你清理了URL.ID(包括額外的逗號),你可以把它扔進一個結構,然後進入一個數組,然後arraytolist清理逗號?這需要3-4行代碼(包括正則表達式)。 – HPWD 2013-01-09 21:35:02

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

@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> 
相關問題