【发布时间】:2013-06-20 01:06:25
【问题描述】:
我有以下方法,它可以正确处理真正的无效/有效日期,但是,如果我遇到空字符串或带有 __/__/____ 等掩码的日期,我想将它们作为有效日期传递,但DateTime.TryParse 使它们无效。如何修改以下方法以传递我的无效场景?下面的方法是一个示例程序:
public bool ValidateDate(string date, out string message)
{
bool success = true;
message = string.Empty;
DateTime dateTime;
if(DateTime.TryParse(date,out dateTime))
{
success = false;
message = "Date is Invalid";
}
return success;
}
void Main()
{
//The only date below that should return false is date4.
string date = "01/01/2020";
string date2 = "";
string date3 = "__/__/____";
string date4 = "44/__/2013";
string message;
ValidateDate(date, out message); //Should return true
ValidateDate(date2, out message); //Should return true
ValidateDate(date3, out message); //Should return true
ValidateDate(date4, out message); //Should return false
}
我无法将其更改为 if(!DateTime.TryParse(date3,out dateTime)),因为这将对我想要验证的日期返回 false。
我也尝试过类似if(!date3.contains("_") && DateTime.TryParse(date3,out dateTime)) 的操作,但这仍然失败。我应该颠倒我的验证顺序吗?问题是我不只是在第一个无效日期返回 false,我正在构建所有无效日期的 StringBuilder 然后返回它,所以我没想到:
if(DateTime.TryParse(date3,out dateTime))
return true;
else
return true;
public bool ValidateDate(string date, out string message)
{
string[] overrides = {"","__/__/____"};
bool success = true;
message = string.Empty;
DateTime dateTime;
if(!overrides.Contains(date) && !DateTime.TryParse(date,out dateTime))
{
success = false;
message = "Date is Invalid";
}
return success;
}
【问题讨论】:
-
您几乎可以肯定必须编写一个正则表达式来处理这个问题。
-
@Yuck - 我想到了正则表达式。你能提供一个答案吗?