2010-06-21 113 views
1

在我的應用程序中,用戶可以通過在文本框中輸入日期來指定日期模式。該模式用於記錄消息。例如,如果用戶指定「DD-MM」,然後在日誌文件中,他可以看到以下內容:C#。日期模式驗證

[12-06] Some message... 
[02-09] Some message 2... 

如何驗證這種模式?如何保護輸入錯誤的模式?

+0

所以你知道這是約會。你想確保它符合日期模式? – Rake36 2010-06-21 12:42:46

+0

如果是在一個月的開始,你將如何區分'dd-MM'和'MM-dd'之間的區別。或者今天可能有很多消息,所以應該是每分鐘一次,所以它是'hh-mm'? – 2010-06-21 12:47:28

+1

考慮ho1的評論以及你的問題。我建議你爲用戶提供一個選項列表,而不是解析輸入的文本。 – 2010-06-21 12:58:01

回答

3

最簡單的方法就是試着解析日期。

DateTime someDate; 

// Valid will be false if it could not parse the date 
bool valid = DateTime.TryParse(yourFormat, out someDate); 
+0

我會添加,如果你需要在客戶端瀏覽器上驗證,只需使用正則表達式。 – Nordes 2010-06-21 12:42:22

+0

DateTime.TryParse()需要一個日期或時間的字符串表示作爲第一個參數(而不是一個模式)。它不需要「dd-MM」,因爲OP正在提供;它想要OP正試圖產生的「12-06」。 – gap 2015-07-16 18:10:29

0

正則表達式可能是一個不錯的選擇。

0

這是一個困難的問題。我試過了:

try 
{ 
    DateTime.Now.ToString(tmpFormatSpec);      
} 
catch (Exception) 
{ 
    // the format spec is known to be bad 
} 

問題是日期格式模式非常靈活。即使事情沒有呈現最新的信息是允許(而不是通過我的示例代碼檢測):

DateTime.Now.ToString("bla"); // no exception raised 

一個更好的方法(我還沒有嘗試過)看到這個other SO post

也請參閱關於該問題的討論,並附上J. Skeet的評論。

0

這是一個難題。我試過了:

try 
{ 
    DateTime.Now.ToString(tmpFormatSpec);      
} 
catch (Exception) 
{ 
    // the format spec is known to be bad 
} 

問題是日期格式模式非常靈活。即使事情沒有呈現最新的信息是允許(而不是通過我的示例代碼檢測):

DateTime.Now.ToString("bla"); // no exception raised 

一個更好的方法(我還沒有嘗試過)看到這個other SO post

關於這個問題,請看這個discussion,由J. Skeet評論。