在我的應用程序中,用戶可以通過在文本框中輸入日期來指定日期模式。該模式用於記錄消息。例如,如果用戶指定「DD-MM」,然後在日誌文件中,他可以看到以下內容:C#。日期模式驗證
[12-06] Some message...
[02-09] Some message 2...
如何驗證這種模式?如何保護輸入錯誤的模式?
在我的應用程序中,用戶可以通過在文本框中輸入日期來指定日期模式。該模式用於記錄消息。例如,如果用戶指定「DD-MM」,然後在日誌文件中,他可以看到以下內容:C#。日期模式驗證
[12-06] Some message...
[02-09] Some message 2...
如何驗證這種模式?如何保護輸入錯誤的模式?
最簡單的方法就是試着解析日期。
DateTime someDate;
// Valid will be false if it could not parse the date
bool valid = DateTime.TryParse(yourFormat, out someDate);
正則表達式可能是一個不錯的選擇。
您可以在Regular Expressions看一看,否則,在這個question
這是一個困難的問題。我試過了:
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的評論。
這是一個難題。我試過了:
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評論。
所以你知道這是約會。你想確保它符合日期模式? – Rake36 2010-06-21 12:42:46
如果是在一個月的開始,你將如何區分'dd-MM'和'MM-dd'之間的區別。或者今天可能有很多消息,所以應該是每分鐘一次,所以它是'hh-mm'? – 2010-06-21 12:47:28
考慮ho1的評論以及你的問題。我建議你爲用戶提供一個選項列表,而不是解析輸入的文本。 – 2010-06-21 12:58:01