Il y a plusieurs choses qui pourraient être améliorées dans la solution de Jeff, cependant.
if (String.IsNullOrEmpty(title)) return "";
À mon humble avis, pas l'endroit pour le tester. Si la fonction passe une chaîne vide, quelque chose ne va pas du tout. Jetez une erreur ou ne réagissez pas du tout.
// remove any leading or trailing spaces left over
… muuuch later:
// remove trailing dash, if there is one
Deux fois le travail. Considérant que chaque opération crée une chaîne entière, c'est mauvais, même si la performance n'est pas un problème. Encore une fois, fondamentalement deux fois le travail: D'abord, utilisez regex pour remplacer plusieurs espaces à la fois. Ensuite, utilisez à nouveau regex pour remplacer plusieurs tirets à la fois. Deux expressions à analyser, deux automates à construire en mémoire, itérer deux fois sur la chaîne, créer deux chaînes: Toutes ces opérations peuvent être réduites à une seule.
Du haut de ma tête, sans aucun test que ce soit, ce serait une solution équivalente:
// 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;
Notez que cette méthode utilise les fonctions de chaîne au lieu des fonctions regex et fonctions char au lieu des fonctions de chaîne chaque fois que possible .
Grande réponse merci, j'ai également ajouté URL = Regex.Replace (URL, @ "<(.|\n)*?>", ""); pour supprimer les balises HTML comme "mon article ici" se tournera vers "my-barticleb-here" –
Un chemin ne peut pas non plus se terminer par une période. Vous ne savez pas non plus pourquoi vous utilisez new [] {'-'}, alors que vous pourriez juste utiliser '-'. –