2011-01-14 21 views
8

Tengo una lista de identificadores que se pasan a través de la URL. Quiero hacer un poco de desinfección antes de ejecutar una consulta basada en esos ID. Tengo esto:Coldfusion: ¿elimina todos los valores no numéricos de una lista?

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

Pero me doy cuenta de que también está quitando la coma. ¿Hay alguna manera simple de eliminar valores no numéricos de una lista en Coldfusion?

Respuesta

20

¿Por qué no acaba de agregar una coma a su expresión regular?

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

convierte

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

doh! ¡Gracias! (Aceptaré esta respuesta tan pronto como me permita) – jyoseph

+0

Curioso, una vez que haya limpiado el URL.ID (incluidas las comas adicionales), podría colocarlo en una estructura, luego en una matriz y luego en un conjunto de arreglos para limpiar las comas? Esto tomaría 3-4 líneas de código (incluida la expresión de expresiones regulares). – HPWD

3

Regex todavía deja comas adicionales en la cadena y acepta números parciales, en lugar que haría uso de un bucle con la validación de número entero:

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

Eso Dicho esto, le gustaría poner esto en un <cfqueryparam .. list= "true" />

+0

+1 Este trabajo de expresiones regulares es mejor que el de @Sean Coyne. Funciona correctamente con mi ejemplo. – orangepips

+0

Mirando esto de nuevo. Hay un problema ... supone que hay una coma al final. reReplace (URL.ID & "," ..) y se encargará de eso –

0

@orangepips

isNumeric() debería funcionar también.

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