Coldfusion - удалить все нечисловые значения из списка? - PullRequest
9 голосов
/ 14 января 2011

У меня есть список идентификаторов, которые передаются через URL. Я хочу провести некоторую дезинфекцию перед выполнением запроса на основе этих идентификаторов. У меня есть это:

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

Но я понимаю, что это также убирает запятую. Есть ли простой способ удалить нечисловые значения из списка в Coldfusion?

Ответы [ 4 ]

21 голосов
/ 14 января 2011

Почему бы просто не добавить запятую к своему регулярному выражению?

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

становится

<cfset URL.ID = ReReplaceNoCase(URL.ID,"[^0-9,]","","ALL")>
4 голосов
/ 14 января 2011
<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" />

3 голосов
/ 14 января 2011

Regex все еще оставляет лишние запятые в строке и принимает частичные числа, вместо этого я бы использовал цикл с целочисленной проверкой:

<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>
0 голосов
/ 04 декабря 2011

@ 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...