Как я могу преобразовать произвольные строки на имена, соответствующие CLS?

StackOverflow https://stackoverflow.com/questions/3010602

  •  26-09-2019
  •  | 
  •  

Вопрос

Кто-нибудь знает об алгоритме (или внешней библиотеке), которую я мог бы позвонить, чтобы преобразовать произвольную строку (то есть вне моего контроля), чтобы быть совместимым?

Я генерирую динамический RDLC (определение клиентского отчета) для контроля просмотра просмотра отчетов ASP.NET, а некоторые имена полевых полей должны быть основаны на строках, введенных пользователем.

К сожалению, я мало контролирую запись имени поля клиентом (через 3-я сторонняя CMS). Но я вполне гибкий вокруг замены, необходимые для создания совместимой строки.

У меня есть алгоритм реактивного взлома в настоящее время вдоль линий:

public static string FormatForDynamicRdlc(this string s)
{
    //We need to change this string to be CLS compliant.
    return s.Replace(Environment.NewLine, string.Empty)
        .Replace("\t", string.Empty)
        .Replace(",", string.Empty)
        .Replace("-", "_")
        .Replace(" ", "_");
}

Но я бы хотел что-то более всеобъемлющее. Есть идеи?

Примечание. Если это какая-либо помощь, алгоритм, который я использую для создания динамического RDLC, основан на методе BuildRDLC, найденным здесь: http://csharpshooter.blogspot.com/2007/08/Revized-dynamic-rdlc-generation.html.

Это было полезно?

Решение

Вот алгоритм, который я использую для создания идентификаторов C / C ++ из произвольных строк (переведен на C #):

    static void Main(string[] args)
    {
        string input = "9\ttotally no @ # way!!!!";
        string safe = string.Concat("_", Regex.Replace(input, "[^a-z0-9_]+", "_"));
        Console.WriteLine(safe);
    }

Ведущий подчеркивает не нужно, если первый персонаж результата Regex не является числовым.

Другие советы

Вот нашел регулярное выражение, которое я нашел, могло быть полезен для разделения CLS-совместимой строковой части и не-CLS-совместимой строковой части. Ниже внедрение в C #:

string strRegex = @"^(?<nonCLSCompliantPart>[^A-Za-z]*)(?<CLSCompliantPart>.*)";
Regex myRegex = new Regex(strRegex, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
string strTargetString = @"                            _aaaaaa[5]RoundingHeader";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top