, а не в поисках вещей, чтобы заменить, список безоговорочно Chars настолько короткий , он сделает для приятного четкого регеляции.
return Regex.Replace(value, @"[^A-Za-z0-9_\.~]+", "-");
(Обратите внимание, что я не включал прибор в списке разрешенных символов; это так, что он сожал от оператора «1 или более» [ +
] так, чтобы несколько тире (в Оригинал или сгенерирован или комбинация) рухнуты, согласно превосходной точке Доминика Роджера.)
Вы также можете удалить общие слова («« »,« AN »,« A »и т. Д.), Хотя это может сделать Слегка измените значение предложения. Вероятно, хотят удалить любые задние тире и периоды.
Также настоятельно рекомендую вам делать то, что так и другие делают, и включают уникальный идентификатор Другое , чем в заголовке, а затем только использовать только этот уникальный идентификатор при обработке URL. Итак http://example.com/articles/1234567/IS-The-pop-catholic
(обратите внимание на отсутствующие «E») и http://example.com/articles/1234567/ Это-папа-католич
разрешается на тот же ресурс.
Я бы делал:
string url = title;
url = Regex.Replace(url, @"^\W+|\W+$", "");
url = Regex.Replace(url, @"'\"", "");
url = Regex.Replace(url, @"_", "-");
url = Regex.Replace(url, @"\W+", "-");
в основном то, что это делает:
Это то, как я в настоящее время пробивающую слов.
public static string Slug(this string value)
{
if (value.HasValue())
{
var builder = new StringBuilder();
var slug = value.Trim().ToLowerInvariant();
foreach (var c in slug)
{
switch (c)
{
case ' ':
builder.Append("-");
break;
case '&':
builder.Append("and");
break;
default:
if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') && c != '-')
{
builder.Append(c);
}
break;
}
}
return builder.ToString();
}
return string.Empty;
}
Пробовали ли вы управление Daypilot ? Есть бесплатная версия, можно попробовать.
-121--4551130-Посмотрите на Деревья пальцев , особенно если вы поклонник ранее упомянутых структур чисто функциональных данных. Они являются функциональным представлением постоянных последовательностей, поддерживающих доступ к концам в амортизированное постоянное время, конкатенацию и разделение во времени логарифмическое в размере меньшего участка.
Согласно оригинальной статье :
Наши функциональные 2-3 пальцевые деревья являются экземпляром общей техники проектирования, введенной Окасаки (1998), называемой неявным рекурсивным замедлением . Мы уже отмечали, что эти деревья являются расширением его неявной дековой структуры, заменяя пары на 2-3 узла, чтобы обеспечить гибкость, необходимую для эффективной конкатенации и разделения.
Дерево пальцев может быть параметризовано моноидом , и использование различных моноидов приведет к различному поведению дерева. Это позволяет деревьям пальцев моделировать другие структуры данных.
-121--1768234-Большинство «вялецов» (методы преобразования в понятные имена типов URL-адресов), как правило, делают следующее:
Насколько мне известно, вялитель StackOverflow делает # 1, # 3 и # 4, но не # 2.
Как насчет этого:
string FriendlyURLTitle(string pTitle)
{
pTitle = pTitle.Replace(" ", "-");
pTitle = HttpUtility.UrlEncode(pTitle);
return Regex.Replace(pTitle, "\%[0-9A-Fa-f]{2}", "");
}