問題消毒的屬性名稱
我需要消毒的字符串從用戶輸入的收集到有效的屬性名稱的字符串。
語境
我們有一個與運行時生成的類工作的DataGrid中。這些類是基於一些參數生成的。參數名稱被轉換成屬性。其中一些參數名稱來自用戶輸入。我們實施了這一切,似乎一切都很好。我們對消毒串的邏輯是,只允許數字和字母,其餘轉換爲X.
const string regexPattern = @"[^a-zA-Z0-9]";
return ("X" + Regex.Replace(input, regexPattern, "X")); //prefix with X in case the name starts with a number
屬性名稱總是正確的,我們存儲在字典中的原始字符串,所以我們仍然可以顯示友好的用戶參數名稱。
然而,麻煩就來了是當一個字符串只有在非法字符,這樣的區別:
參數名稱
PARAMETER_NAME
這些均被轉化爲:
ParameterXName
一個解決方案就是生成一些安全的,無關的名字,比如A,B C.等等。但是我更喜歡這個名字在調試時仍然可以被識別。除非當然實施這種行爲太複雜。
我看着StackOverflow的其他問題,但他們似乎都刪除了非法字符,它們有相同的問題。
我覺得我正在重新發明輪子。有沒有一些標準的解決方案或訣竅呢?
你想要的東西一樣,如果存在三個字符串爲 「參數名」「 Parameter_Name「和」Parameter!Name「 輸出應該是ParameterAName ParameterBName ParameterCName –
試試這個'[^ a-zA-Z0-9 _]'。注意空間和下劃線。請注意是否可用 –
您可以存儲值對(參數名稱,用戶輸入) – Mariano