ПроблемыСанобработка строки для имени свойства
Мне нужно дезинфицировать набор строк из пользовательского ввода действительного имени свойства.
Контекст
У нас есть 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
Имена свойств всегда были правильными, и мы сохранили исходную строку в словаре, чтобы мы могли еще показать дружественный к пользователю имя параметра.
Однако там, где начинаются проблемы, когда строка отличается только недопустимыми символами, как это:
Имя параметра
ИМЯ_ПАРАМЕТР
Они оба были преобразованы в:
ПараметрXName
Решение будет состоять в том, чтобы просто создать некоторые безопасные, несвязанные имена, такие как A, B C. и т. Д. Но я бы предпочел, чтобы имя все еще было распознано при отладке. Если это слишком сложно для реализации этого поведения, конечно.
Я смотрел другие вопросы по StackOverflow, но все они, кажется, удаляют незаконные символы, которые имеют ту же проблему.
Мне кажется, что я изобретаю колесо. Есть ли какое-то стандартное решение или трюк для этого?
вы хотите что-то вроде, если существует три строки, как "Параметр Name" " Parameter_Name "и" Parameter! Name " вывод должен быть ParameterAName ParameterBName ParameterCName –
попробуйте этот '[^ a-zA-Z0-9 _]'. обратите внимание на пространство и подчеркивание. любезно комментарий, если он работает –
Вы можете сохранить пару значений (имя параметра, ввод пользователя) – Mariano