كيف يمكنني تحويل السلاسل التعسفية إلى أسماء متوافقة مع CLS؟

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

  •  26-09-2019
  •  | 
  •  

سؤال

هل يعرف أي شخص خوارزمية (أو مكتبة خارجية) يمكنني الاتصال لتحويل سلسلة تعسفية (أي خارج سيطرتي) لتكون متوافقة مع CLS؟

أقوم بإنشاء RDLC ديناميكي (تعريف تقرير العميل) لعنصر التحكم في تقرير ASP.NET وبعض أسماء الحقول يجب أن تستند إلى سلاسل أدخلها المستخدم.

لسوء الحظ ، لديّ سيطرة ضئيلة على إدخال أسماء الحقل من قبل العميل (من خلال 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/revised-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 رقمية.

نصائح أخرى

فيما يلي إعادة 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