2011-01-14 36 views
8

Tôi có một danh sách các ID được chuyển qua URL. Tôi muốn làm một số khử trùng trước khi chạy một truy vấn dựa trên những ID đó. Tôi có điều này:Coldfusion - Xóa tất cả các giá trị không phải là số từ danh sách?

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

Nhưng tôi nhận ra cũng đang loại bỏ dấu phẩy. Có cách nào đơn giản để loại bỏ các giá trị phi số từ một danh sách trong Coldfusion?

Trả lời

20

Tại sao không chỉ thêm dấu phẩy vào regex của bạn?

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

trở thành

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

doh! Cảm ơn! (Tôi sẽ chấp nhận câu trả lời này ngay khi nó cho phép tôi) – jyoseph

+0

Tò mò, một khi bạn đã làm sạch URL.ID (bao gồm dấu phẩy thừa), bạn có thể ném nó vào một cấu trúc, sau đó vào một mảng và sau đó arraytolist để làm sạch dấu phẩy? Điều này sẽ mất 3-4 dòng mã (bao gồm cả biểu thức regex).? – HPWD

3

Regex vẫn lá thêm dấu phẩy trong chuỗi và chấp nhận số phần, thay vào đó tôi muốn sử dụng một vòng lặp với xác nhận số nguyên:

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

Đó được nói, bạn muốn đặt điều này trong một số <cfqueryparam .. list= "true" />

+0

+1 Công việc regex này tốt hơn so với @Sean Coyne's. Nó hoạt động chính xác với ví dụ của tôi. – orangepips

+0

Nhìn lại điều này. Có vấn đề .. nó giả định có dấu phẩy. làm reReplace (URL.ID & "," ..) và nó sẽ giải quyết vấn đề đó –

0

@orangepips

isNumeric() cũng hoạt động.

<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> 
Các vấn đề liên quan