Es gibt jedoch einige Dinge, die in Jeffs Lösung verbessert werden könnten.
if (String.IsNullOrEmpty(title)) return "";
IMHO, nicht der Ort, um dies zu testen. Wenn die Funktion eine leere Zeichenfolge übergeben wird, ist etwas sehr schief gelaufen. Wirf einen Fehler oder reagiere überhaupt nicht.
// remove any leading or trailing spaces left over
… muuuch later:
// remove trailing dash, if there is one
Zweimal die Arbeit. Wenn man bedenkt, dass jede Operation eine ganz neue Zeichenfolge erzeugt, ist dies schlecht, auch wenn die Leistung kein Problem darstellt.
// replace spaces with single dash
title = Regex.Replace(title, @"\s+", "-");
// if we end up with multiple dashes, collapse to single dash
title = Regex.Replace(title, @"\-{2,}", "-");
Noch einmal, im Grunde doppelt so viel Arbeit: Erstens, Regex verwenden, um mehrere Leerzeichen auf einmal zu ersetzen. Verwenden Sie dann erneut Regex, um mehrere Bindestriche gleichzeitig zu ersetzen. Zwei Ausdrücke zu analysieren, zwei Automaten im Speicher zu konstruieren, zweimal über die Zeichenfolge zu iterieren, zwei Zeichenfolgen zu erstellen: All diese Operationen können auf eine einzige reduziert werden.
Aus der Spitze von meinem Kopf, ohne Prüfung auch immer, wäre dies eine gleichwertige Lösung sein:
// make it all lower case
title = title.ToLower();
// remove entities
title = Regex.Replace(title, @"&\w+;", "");
// remove anything that is not letters, numbers, dash, or space
title = Regex.Replace(title, @"[^a-z0-9\-\s]", "");
// replace spaces
title = title.Replace(' ', '-');
// collapse dashes
title = Regex.Replace(title, @"-{2,}", "-");
// trim excessive dashes at the beginning
title = title.TrimStart(new [] {'-'});
// if it's too long, clip it
if (title.Length > 80)
title = title.Substring(0, 79);
// remove trailing dashes
title = title.TrimEnd(new [] {'-'});
return title;
Beachten Sie, dass diese Methode String-Funktionen anstelle von Regex Funktionen und char Funktionen anstelle von String-Funktionen, wann immer möglich verwendet .
Tolle Antwort Danke, ich habe auch URL = Regex.Replace (URL, @ "<(.|\n)*?>", ""); HTML-Tags zu entfernen, wie "mein Artikel hier" wird zu "my-barticleb-here" –
Ein Pfad kann auch nicht mit einem Punkt enden. Auch nicht sicher, warum Sie new [] {'-'} verwenden, wenn Sie einfach '-' verwenden können. –