三個程式設計中遇到的小問題彙編

溫謙發表於2013-05-23

本貼收集了幾個開發中遇到的小問題。

1:利用正規表示式關閉未關閉的 <img>標籤。

對於一般的瀏覽器來說,img 標籤是否關閉,即 <img src="pic.jpg"> 還是 <img src="pic.jpg" /> 都可以。但是最近在寫markdown 轉 epub 格式的轉換器,發現如果不關閉 <img 標籤,有的 epub 閱讀器就會報錯。

用正規表示式解決這個問題很簡單:

html = Regex.Replace(html, @"(<img(""[^""]*""|[^>])+)(?<!/)>", @"$1 />");

實際使用了上面這個正規表示式以後,發現有些問題,換成了另一個簡單一些的:

html = Regex.Replace(html, @"(<img[^>]+)(?<!/)>");

請參考:http://stackoverflow.com/questions/2433809/close-all-html-unclosed-img-tags

2: ASP.NET 中全域性設定日期時間格式

在顯示 DateTime 型別的值的時候,都會呼叫 ToString() 方法,在中文環境,預設的日期顯示格式是 2013/03/24 11:20:45 這樣。

如果我們希望修改顯示格式,可以在顯示時候呼叫ToString() 時加上一個格式化的引數,例如:

DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")

這樣就會把斜線分隔符變成橫線了。但是每次都要這樣寫就比較麻煩了。而且在頁面顯示的時候,經常會遇到 DateTime? 型別的情況,例如在Razor頁面,假設要顯示一個變數 CreateTime,它是 DateTiem? 型別的。 本來很簡單,只要幾個字母就可以了:

@CreateTime

這樣的結果是,如果是 CreateTime 等於 null 則不顯示,如果不是 null 時則顯示時間,但是如果為了修改顯示時間的格式,就要手工呼叫帶有格式字串引數的 ToString() 方法,而且麻煩的是此時還必須判斷一下是不是空,否則如果 CreateTime == null ,就要丟擲 NullReference 異常了。

因此這句話就變成了:

@(CreateTime == null ?  CreateTime.Value.ToString("yyyy-MM-dd HH:mm:ss")  :  "")

一下子複雜了很多,因此可以做一個全域性的設定:

protected void Application_BeginRequest()
{
    CultureInfo newCulture =  
         (CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
    //newCulture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";
    //newCulture.DateTimeFormat.LongTimePattern = "HH:mm:ss";
    newCulture.DateTimeFormat.DateSeparator = "-";
    Thread.CurrentThread.CurrentCulture = newCulture;
}
  • 如果只改分隔符,只修改 newCulture.DateTimeFormat.DateSeparator 即可。
  • 如果要作其他修改,分別設定短日期和長時間的格式即可,如上面程式碼中註釋掉的兩行所示。

3. 在Visual Studio中建立清晰的專案結構

  • 開啟 Visual Studio 。
  • FILE -> New Project 。
  • 在對話方塊左側欄選擇
    Installed -> Templates -> Other Project Types -> Visual Studio Solutions -> Blank Solution 。
  • 填寫 Solution 的名字,例如 MyApp 。
  • 填寫 Solution 的位置,例如 D:\, 而不要寫 D:\MyApp 。
  • 確定,這樣就建立了一個空的 Solution 。
  • 在右側 Solution Explore 窗格中選中建立的Solution名稱,滑鼠右鍵,選擇 Add -> New Project... 。
  • 在對話方塊中選擇專案型別,例如 C# -> Web -> ASP.NET MVC4 。
  • 填寫專案名稱,例如 MyApp.Web 。
  • 填寫專案位置,例如 D:\MyApp,而不要寫 D:\MyApp\MyApp.Web 。
  • 可以繼續增加各種 Project 到 Solution 中。這樣就可以建立起一個結構很清晰的 Solution 了。

相關文章