我試圖創建類似於bool系統堆棧溢出具有mvc控制器。如果我將最後一個或第一個dobbel星更改爲/ *之類的其他東西,那麼下面的代碼工作得很完美,但如果我希望兩者都是相同的呢? 像第一次**將是< b>,下次**將是</b>。相同的string.replace()在MVC控制器中給出了兩個不同的含義
[HttpPost]
[ValidateInput(false)]
public ActionResult Comment(Models.CommentModel s)
{
StringBuilder sbComments = new StringBuilder();
sbComments.Append(HttpUtility.HtmlEncode(s.comment));
sbComments.Replace("**", "<b>");
sbComments.Replace("**", "</b>");
sbComments.Replace("<b>", "<b>");
sbComments.Replace("</b>", "</b>");
s.comment = sbComments.ToString();
var db = new WebApplication1.Models.ApplicationDbContext();
if (ModelState.IsValid)
{
db.Comments.Add(s);
db.SaveChanges();
return RedirectToAction("Comment");
}
return View(s);
}
我的解決方案感謝baiyangcao`s答案:
正則表達式可能看起來複雜,但它不是很難理解。 這個網站http://regexr.com/讓我很明白這一點。
public ActionResult Comment(Models.CommentModel s)
{
Regex fat = new Regex(@"\*\*(.*?)\*\*");
Regex italic = new Regex(@"_(.*?)_");
Regex largeText = new Regex(@"#(.*?)#");
s.kommentar = HttpUtility.HtmlEncode(s.comment);
s.comment = largeText.Replace(s.comment, "<h1>$1</h1>");
s.comment = fat.Replace(s.comment, "<b>$1</b>");
s.comment = italic.Replace(s.comment, "<i>$1</i>");
//this is the database I am adding my comments to
var db = new WebApplication1.Models.ApplicationDbContext();
if (ModelState.IsValid)
{
db.Comments.Add(s);
db.SaveChanges();
return RedirectToAction("Comment");
}
return View(s);
}
找不到Regex()
?請記得在頁面頂部添加using System.Text.RegularExpressions;
庫。
的可能的複製[.NET - 服務器端降價到HTML轉換(http://stackoverflow.com/questions/448112 /淨的服務器端-降價到HTML轉換) – trailmax