问题
我需要对用户输入的一组字符串进行清理,以使其成为有效的属性名称。
背景
我们有一个 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
Parameter_Name
这两个都被转换为:
ParameterXName
一个解决方案是只生成一些安全、无关的名称,例如A、B、C等。但我更喜欢名称在调试时仍然能够被识别。除非实现这种行为过于复杂,否则我会更倾向于这个方案。
我查看了StackOverflow上的其他问题,但它们似乎都删除非法字符,这与我的问题相同。
我觉得我正在重新发明轮子。有没有标准解决方案或技巧来解决这个问题?
[^a-zA-Z0-9 _]
。请注意空格和下划线,并在测试后留下评论以确认其是否有效。 - james jelo4kulParameterXName0
Parameter_Name ->ParameterXName1
- Matteo Umili