2010-09-28 27 views
11

我想從輸入字段中刪除所有特殊字符(」/{}等)被保存爲一個字符串DB。使用ColdFusion和Microsoft SQL刪除特殊字符的最佳方法?

什麼是最好的辦法?

如果這種檢查可以解決與JS,ColdFusion的或Microsoft SQL - 也許所有這三個

我將如何着手編寫此使用ColdFusion或Microsoft SQL

+0

對於UI,您應該查看JQuery Masked輸入。 http://digitalbush.com/projects/masked-input-plugin/ http://plugins.jquery.com/project/maskedinput – Vikas 2010-09-29 04:26:11

+0

在應用層(即CF)上刪除它是最有意義的。也許你會發現這很有用:http://demo.bryantwebconsulting.com/datamgr/word.cfm – Henry 2010-09-28 19:32:47

回答

15

你是指一切都不是字母數字?

我可能會在數據層使用REReplace。

<cfqueryparam 
    cfsqltype="cf_sql_varchar" 
    value="#REReplace(myVar,"[^0-9A-Za-z ]","","all")#" 
/> 

更新:更改爲包含 「空間」。

+0

添加它作爲一個有效的字符。我改變了我的答案,允許使用空格字符。 – ale 2010-09-28 20:14:47

+0

爲什麼不標點符號? – Henry 2010-09-28 20:39:40

+0

它是否支持UTF-8?我想不是,我是對的嗎? – 2012-07-18 13:14:18

3

您確定要列入黑名單,只有這些字符通常是一個更安全的方法是?僅將可接受的字符列入白名單。

如果你想確保你的數據保持純淨,最安全的地方是使用INSERT/UPDATE觸發器來源。

您可以編寫一個在T-SQL中執行此操作的UDF,或者爲獲得最佳性能,請使用C#或類似語言將其作爲CLR函數實現。

雖然這樣做只會影響會導致驗證問題。例如,如果用戶只在必填字段中輸入了無效字符,他們基本上沒有給你任何輸入,所以你的GUI可能需要拋出驗證錯誤。因此,最好在前端進行可用性驗證檢查,並在後端觸發數據完整性。

6

使用正則表達式ColdFusion的

<cfset cleanInput = rereplace(form.input,"[^A-Za-z0-9]","","all") /> 

這是說更換,是不是A到Z或任何字符或a到z 0到9沒事做給大家遇到過。

+2

至於「何時去做」: Javascript:當您需要用戶知道以方便 應用服務器:始終用於驗證,並且您可以請求更正 數據庫級別:取決於貴組織的策略,但實際上只是額外的,額外的。在應用程序級別提供反饋更容易。 – 2010-09-28 19:27:46

0

如果字符不在白名單上,我將此用作檢查以獲取錯誤返回信息。

<cfif len(testString) EQ len(rereplaceNocase(testString,"[^A-Za-z0-9-+$. _[]","","all"))> 
    TRUE<br> 
<cfelse> 
    FALSE<br> 
</cfif> 
+0

或者:'' – 2012-05-24 10:46:08

+1

@PeterBoughton您的regx尋找/接受什麼? – HPWD 2012-06-26 17:56:37

+0

與發佈的完全相同,但將'A-Za-z0-9_'濃縮爲'\ w',並且缺少添加到'-'和'['字符的轉義符。 _更重要的是,所有的len/replace廢話已經被刪除,所以它更加明顯,發生的更快。 – 2014-02-17 14:26:22