2011-01-14 22 views
8

Ho una lista di ID passati attraverso l'URL. Voglio fare un po 'di sanificazione prima di eseguire una query basata su quegli ID. Ho questo:Coldfusion - Rimuove tutti i valori non numerici da un elenco?

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

Ma mi rendo conto che sta eliminando anche la virgola. C'è un modo semplice per rimuovere valori non numerici da un elenco in Coldfusion?

risposta

20

Perché non aggiungere una virgola alla tua espressione regolare?

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

diventa

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

doh! Grazie! (Accetterò questa risposta non appena mi permetterà) – jyoseph

+0

Curioso, una volta che hai cancellato l'URL.ID (incluse le virgole extra), potresti lanciarlo in una struttura, poi in un array e poi in arraytolist per ripulire le virgole? Ciò richiederebbe 3-4 righe di codice (inclusa l'espressione regolare). – HPWD

3

Regex lascia ancora le virgole in più nella stringa e accetta numeri parziali, invece mi piacerebbe utilizzare un ciclo con la convalida intero:

<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> 

Quello detto questo, vorresti metterlo in uno <cfqueryparam .. list= "true" />

+0

+1 Questa espressione regolare è migliore di quella di @Sean Coyne. Funziona correttamente con il mio esempio. – orangepips

+0

Guardando di nuovo. C'è un problema ... presuppone che ci sia una virgola finale. fare reReplace (URL.ID & "," ..) e si prenderà cura di quello –

0

@orangepips

isNumeric() dovrebbe funzionare anche.

<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> 
Problemi correlati