다음을 통해 공유


ParagraphFormat() ? where art thou..

Interesting night for me, as I’ve spent the last 4 hours fumbling around in the Google dark trying to find a way to take “comments” for the team.silverlight blog, sanitize them but preserve their natural format in which the user typed them.

In that for example, I like to sign my signature in most comments on blogs like this:

-
Scott Barnes
Rich Platforms Product Manager
Microsoft.

3 Lines basically, but to do this in most of the libraries I've seen, they always end up like this:

- Scott Barnes Rich Platforms Product Manager Microsoft.

The only way i can preserve the said format, is to use <pre> tags and via CSS make them look more natural.

The downside, is I then sacrifice basic html which is one feature I want to implement.

Any magical RegEx formulas out there than can handle both shift+linefeed as well as preserve double space line feeds with <p></p> tags I’m all ears.

As the intended format of a comment should end up like this:

 start
 <p> 
  Your comment goes here 
</p> 
<p> 
    -<br /> 
  Scott Barnes</br> 
    Rich Platforms Product Manager </br> 
 Microsoft</br> 
</p>

Comments

  • Anonymous
    April 21, 2009
    Will this do? public static class StringExtensions    {        public static string ParagraphFormat(this string text)        {            // Find multiple new-lines 3 or over & change to double new-lines            var re = new Regex("n{3,}");            text = re.Replace(text, "nn");            // Split into paragraphs            var paragraphs = text.Split(new [] { "nn" }, StringSplitOptions.RemoveEmptyEntries);            var sb = new StringBuilder();            foreach (var p in paragraphs)            {                sb.Append("<p>");                // Split into lines                var lines = p.Split('n');                bool last = lines.Length == 1;                var count = 1;                foreach (var l in lines)                {                    sb.Append(l);                    if (count < lines.Length)                    {                        sb.Append("<br />");                    }                    count++;                }                sb.Append(@"</p>");            }            return sb.ToString();        }    }

  • Anonymous
    April 21, 2009
    You have much to learn young pup :) hehehehe Nice code, i added some extras and now i can get the above... untz untz untz..


   public static class StringExtensions    {        public static string ParagraphFormat(this string text)        {            if (String.IsNullOrEmpty(text))                return "null";            // Find multiple new-lines 3 or over & change to double new-lines            var re = new Regex("n{3,}");            text = re.Replace(text, "nn");            // Split into paragraphs            var paragraphs = text.Split(new[] { "nn" }, StringSplitOptions.RemoveEmptyEntries);            var sb = new StringBuilder();            foreach (var p in paragraphs)            {                sb.Append("<p>");                // Split into lines                var lines = p.Split('n');                bool last = lines.Length == 1;                var count = 1;                string prevline = "";                foreach (var l in lines)                {                    sb.Append(l);                    if (count < lines.Length)                    {                        if (l.StartsWith("r") & prevline.EndsWith("r"))                        {                            sb.Append("</p><p>");                        }                        else                        {                            sb.Append("<br />");                        }                    }                    count++;                    prevline = l;                }                sb.Append(@"</p>");            }            var re2 = new Regex("<(\w+)>(\s|&nbsp;)*</\1>");            string result = sb.ToString();            result = re2.Replace(result,"");            result = result.Replace("r<br />r</p>", "</p>");            return result;        }    }

  • Anonymous
    April 22, 2009
    All these late nights, I wonder what Mr Barnes is working on?