如何在正则表达式中包含特殊字符?

时间:2016-06-07 23:10:21

标签: c# asp.net regex asp.net-mvc

我有这个常规将帖子标题转换为slug,我的问题是当我在我的帖子名称中包含像(:,|,?)这样的字符时,我收到了错误。我不知道如何让我的常规包括特殊字符..

这是我的代码:

public static string MakeUrlFriendly(this string value)
    {
        value = value.ToLowerInvariant();

        value = Regex.Replace(value, @"[^a-z0-9\s-]", "");
        // convert multiple spaces into one space   
        value = Regex.Replace(value, @"\s+", " ").Trim();
        // cut and trim 
        value = value.Substring(0, value.Length <= 70 ? value.Length : 70).Trim();
        value = Regex.Replace(value, @"\s", "-"); // hyphens   


        value = value.ToLowerInvariant().Replace(" ", "-");
        value = Regex.Replace(value, @"[^0-9a-z-]", string.Empty);

        return value;
    }

我从这里叫它:

var Myurl = model.Book_name;
            model.UrlSlug = Myurl.MakeUrlFriendly();

当我添加一个帖子名称时:&#34;普拉提核心功能剖析:安全图解指南&#34;

enter image description here

我收到了这个错误:

enter image description here

虽然它看起来应该是:功能解剖 - 普拉提 - 核心 - 示例 - 指导安全

1 个答案:

答案 0 :(得分:0)

为什么不从字符串中删除所有无效字符,而不是慢慢迭代并更新正则表达式以提供正确的文件名?我们给出了无效字符,这些字符可以在多个平台上使用。

var myTitle = "Functional Anatomy of the Pilates Core: An Illustrated Guide to a Safe";
foreach (var invalidChar in Path.GetInvalidFileNameChars())
    myTitle = myTitle.Replace(invalidChar.ToString(),string.Empty);

//Now you can trim spaces, etc

此外,在生成安全网址时,您应该使用内置的this