2009-07-24 6 views
2

空白のようなURLの一部ではないすべての文字を削除する必要があります。文字列をURLの一部としてフォーマットする方法は?

データベースからデータを取得しています。
たとえば、取得したデータがProduct#number 123!

新しい文字列は次のようになります。製品番号-123

私は正規表現を使用する必要がありますか?そのための正規表現のパターンはありますか?ここで おかげ

+1

私はあなたがSEOフレンドリーな文字列をしたいそれを取ります。データを保存する(uri-escaped)文字列ではありませんか? –

+0

はい、そのようなものです: –

答えて

1

これを行う簡単な正規表現は次のとおりです。

string cleaned = Regex.Replace(url, @"[^a-zA-Z0-9]+","-"); 
+1

はい、これはかなりシンプルです。連続した " - "を置き換えてフォローアップすることもできます。私の頭の上のようなもの: 'cleaned = Regex.Replace(cleaned、@" - + "、" ");' はこのトリックを行うべきです。 –

+0

チェックアウト時に提案を含めるように回答を編集しました。あなたが気にしないといいですね:) –

+0

あなたの編集が正しいかどうかは気にしませんが、そうではありません。私の元の正規表現の置換は連続したダッシュを生成しません。 –

2

は、「通常」の文字列からURLに優しい文字列を生成する方法の例です:

public static string GenerateSlug(string phrase) 
{ 
    string str = phrase.ToLower(); 

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

    return str; 
} 

あなたはあなたが常にことをしている場合は、トリム部分を削除することもできます完全な文字列が必要です。

Source

+3

上記の最後に複数のハイフンを置き換える価値があるかもしれませんが、あなたは私の---- name ----で終わることがあります。 –

+0

これは既に他の文字列に問題がありますか? "my-name- -is" – Espo

+0

これは、単一のregexを置き換えてできることを達成するための非常に複雑なコードのようです。 –

1

ちょうど「<」あなたはServer.UrlEncode(string s)を使用することができますなどの特殊文字の置き換えを実行するには。そして、あなたはServer.UrlDecode(string s)と反対にすることができます。

+0

彼はすべての余分な文字を含むものではなく、人間が読める(別名SEO)フレンドリーなURLの後にいるように見えます。これはうまくいくが、すべてが読めるわけではない。 –

+0

それは公正な点です。私は明らかにその問題の一部を見逃していました。 –

関連する問題