Mặc dù vậy, có một số điều có thể được cải thiện trong giải pháp của Jeff.
if (String.IsNullOrEmpty(title)) return "";
IMHO, không phải là nơi để kiểm tra điều này. Nếu hàm được truyền qua một chuỗi rỗng, thì có điều gì đó đã bị lỗi nghiêm trọng. Ném một lỗi hoặc không phản ứng gì cả.
// remove any leading or trailing spaces left over
… muuuch later:
// remove trailing dash, if there is one
Hai lần công việc. Xem xét rằng mỗi hoạt động tạo ra một chuỗi hoàn toàn mới, điều này là xấu, ngay cả khi hiệu suất không phải là một vấn đề.
// 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,}", "-");
Một lần nữa, về cơ bản gấp đôi công việc: Trước tiên, sử dụng regex để thay thế nhiều dấu cách cùng một lúc. Sau đó, sử dụng lại regex để thay thế nhiều dấu gạch ngang cùng một lúc. Hai biểu thức để phân tích cú pháp, hai automata để xây dựng trong bộ nhớ, lặp lại hai lần trên chuỗi, tạo hai chuỗi: Tất cả các hoạt động này có thể được thu gọn thành một chuỗi duy nhất.
Off đỉnh đầu của tôi, mà không cần bất kỳ thử nghiệm nào, đây sẽ là một giải pháp tương đương:
// 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;
Chú ý rằng phương pháp này sử dụng các chức năng chuỗi thay vì chức năng regex và chức năng char thay vì chức năng chuỗi bất cứ khi nào có thể .
Cảm ơn câu trả lời tuyệt vời, tôi cũng đã thêm URL = Regex.Replace (URL, @ "<(.|\n)*?>", ""); để xóa thẻ HTML là "số bài viết tại đây" của tôi "sẽ chuyển sang" my-barticleb-here " –
Đường dẫn cũng không thể kết thúc bằng dấu chấm. Cũng không chắc chắn lý do tại sao bạn sử dụng [] {'-'} mới, khi bạn chỉ có thể sử dụng '-'. –