C# – Wie man einen String zu einem Kebab Case String konvertiert

In diesem Snippet zeigen wir, wie man einen String so umwandelt, dass man einen schönen Kabab Case Spieß erhält. Scharf und mit allen Saucen. 

Was ist eigentlich Kabab Case? Beim Kebab Case werden die einzelnen Teilestrings per Dash (-) getrennt und für gewöhnlich in Kleinbuchstaben umgewandelt. Aus „Hallo ballo“ würde „hallo-ballo“ werden. Auch Sonderzeichen und doppelte Dashs werden in einen Dash umgewandelt. Dashs am Anfang und Ende werden entfernt.

So könnte nun ein Konverter aussehen, der die Regeln umsetzt.

using System.Text.RegularExpressions;

namespace Core.Converter
{
    public class KebabConverter
    {
        public static string ToKebabCase(string? value)
        {
            if (value == null)
            {
                return "";
            }
            // finde and ersetze alle Teile, die mit einem Großbuchstaben starten (z.B. Net)
            value = Regex.Replace(value, "[A-Z][a-z]+", m => $"-{m.ToString().ToLower()}");
            
            // finde and ersetze alle Teile, die nur aus Großbuchstaben bestehen (z.B. NET)
            value = Regex.Replace(value, "[A-Z]+", m => $"-{m.ToString().ToLower()}");
                        
            // Ersetze alle Nicht-Alphanummerischen Zeichen mit einem Dash (z.B. $%)
            value = Regex.Replace(value, @"[^0-9a-zA-Z]", "-");

            // Ersetze alle mehrfach hintereinander vorkommenden Dashes durch einen einzelnen Dash (z.B. ---)
            value = Regex.Replace(value, @"[-]{2,}", "-");

            // Entferne alle Dashes am Ende
            value = Regex.Replace(value, @"-+$", string.Empty);

            // Entferne alle Dashes am Anfang
            if (value.StartsWith("-")) value = value.Substring(1);
            
            // Lowercase und return
            return value.ToLower();
        }
    }
}

Und hier ein Test dazu.

using Core.Converter;
using FluentAssertions;
using Xunit;

namespace Core.Tests.Converter
{
    public class KebabConverterTests
    {
        [Fact]
        public void GetValidKebabCase()
        {
            string s1 = "KebabAusPascalCase";
            string s2 = "KebabAusCamelCase";
            string s3 = "Kebab aus Leerstellen";
            string s4 = "KebabMitZahlen12345";
            string s5 = "Kebab mit Zahlen 12345";
            string s6 = "Kebab--mit--Dash";
            string s7 = "Kebab%mit§$Sondärzeichön?";
            string s8 = "-kebab mit dash am anfang und ende-";
            
            var result1 = KebabConverter.ToKebabCase(s1);
            result1.Should().Be("kebab-aus-pascal-case");
            
            var result2 = KebabConverter.ToKebabCase(s2);
            result2.Should().Be("kebab-aus-camel-case");
            
            var result3 = KebabConverter.ToKebabCase(s3);
            result3.Should().Be("kebab-aus-leerstellen");
            
            var result4 = KebabConverter.ToKebabCase(s4);
            result4.Should().Be("kebab-mit-zahlen12345");
            
            var result5 = KebabConverter.ToKebabCase(s5);
            result5.Should().Be("kebab-mit-zahlen-12345");
            
            var result6 = KebabConverter.ToKebabCase(s6);
            result6.Should().Be("kebab-mit-dash");
            
            var result7 = KebabConverter.ToKebabCase(s7);
            result7.Should().Be("kebab-mit-sond-rzeich-n");
            
            var result8 = KebabConverter.ToKebabCase(s8);
            result8.Should().Be("kebab-mit-dash-am-anfang-und-ende");
            
        }

        [Fact]
        public void GetValidKebabCase_Uppercase()
        {
            string s1 = "ASPNetCore";
            var result1 = KebabConverter.ToKebabCase(s1);
            result1.Should().Be("asp-net-core");

            string s2 = "KEBAB mit PascalCase und UPPERCaseLETTERN";
            var result2 = KebabConverter.ToKebabCase(s2);
            result2.Should().Be("kebab-mit-pascal-case-und-upper-case-lettern");
        }
    }
}

Ich hoffe wie immer, dieses erstbeste Snippet war hilfreich.


 

Quellen:

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert