【发布时间】:2015-12-26 14:17:07
【问题描述】:
问题
我需要将用户输入的字符串集合清理为有效的属性名称。
上下文
我们有一个与运行时生成的类一起使用的 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
属性名称总是正确的,我们将原始字符串存储在字典中,因此我们仍然可以显示用户友好的参数名称。
然而,问题开始的地方是当一个字符串只有这样的非法字符不同时:
参数名称
参数名称
这些都被转换成:
参数X名称
一种解决方案是只生成一些安全的、不相关的名称,例如 A、B C 等。但我希望该名称在调试中仍可识别。当然,除非实现这种行为太复杂。
我在StackOverflow上查看了其他问题,但他们似乎都删除了非法字符,这有同样的问题。
我觉得我在重新发明轮子。是否有一些标准的解决方案或技巧?
【问题讨论】:
-
如果存在三个字符串,如“参数名称”、“参数名称”和“参数!名称”输出应该是 ParameterAName ParameterBName ParameterCName
-
试试这个
[^a-zA-Z0-9 _]。注意空格和下划线。如果可行,请发表评论 -
您可以存储值对(参数名称,用户输入)
-
是否可以在生成的参数名称末尾附加该名称的出现次数? (在参数名称生成时)例如 Parameter Name ->
ParameterXName0Parameter_Name ->ParameterXName1
标签: c# regex string sanitization