2011-01-20 4 views
4

私はフォーラムを構築しており、現在はベータ版です。ユーザーは、画面を引き伸ばしてスタイリングを台無しにするスペースのない長い文字列をポストするなど、特定のことを悪用し始めました。私はちょうどこのコードを使用し始め、それは正常に動作します。途切れることのないテキストと挿入スペースを見つけるための正規表現

 int charIndex = 0; 
     int noSpaceCount = 0; 
     foreach (char c in text.ToCharArray()) 
     { 
      if (c != ' ') 
       noSpaceCount++; 
      else 
       noSpaceCount = 0; 

      if (noSpaceCount > 150) 
      { 
       text = text.Insert(charIndex, " "); 
       noSpaceCount = 0; 
      } 
      charIndex++; 
     } 

このコードは機能しますが、可能であれば正規表現を使用することをお勧めします。問題は、正規表現を使用してリンクを識別し、長いリンクをスペースで区切りたい場合、リンク表示のテキストを省略することで修正されるためです。だから私はURLとして識別するテキスト部分にスペースを挿入したくないですが、150文字ごとに空白を挿入したいのですが、リンクされていないテキストでなければなりません。

提案がありますか?

+1

で「"([^ ]{150})を交換してください。あなたがラップする単語を追加することはできません? – alexn

+0

ワードラップを、 「オーバーフロー:隠し」 – Thomas

+0

ワードラップは静的なサイズの要素に対してのみ機能し、画面の幅を占めるdivでは機能しません。内容に合わせてdivを伸ばします。 – Chev

答えて

4

これは驚くほど複雑でした。偉大な.NET正規表現ライブラリのEricと同僚に感謝します。

resultString = Regex.Replace(subjectString, 
    @"(?<=  # Assert that the current position follows... 
    \s  # a whitespace character 
    |   # or 
    ^  # the start of the string 
    |   # or 
    \G  # the end of the previous match. 
    )   # End of lookbehind assertion 
    (?!(?:ht|f)tps?://|www\.) # Assert that we're not at the start of a URL. 
    (\S{150}) # Match 150 characters, capture them.", 
    "$1 ", RegexOptions.IgnorePatternWhitespace); 
+0

ありがとう!今すぐテストしてください。 – Chev

+0

Woohoo!私はあなたの正規の指導者に多くの敬意を払っています。私はこの回答を2度受け入れることができたらいいと思う。 – Chev

0

これは、レイアウトの問題を修正する非常に悪い解決策であると思われるグローバル"\1 "(あなたの正規表現の風味に応じて変更)

関連する問題