C#。日期模式的验证
在我的应用程序中,用户可以通过在文本框中输入日期来指定日期模式。此模式用于记录消息。例如,如果用户指定“dd MM”,则在日志文件中他可以看到以下内容:C#。日期模式的验证,c#,validation,C#,Validation,在我的应用程序中,用户可以通过在文本框中输入日期来指定日期模式。此模式用于记录消息。例如,如果用户指定“dd MM”,则在日志文件中他可以看到以下内容: [12-06] Some message... [02-09] Some message 2... 如何验证此模式?如何防止输入错误的模式?最简单的方法就是尝试解析日期 DateTime someDate; // Valid will be false if it could not parse the date bool valid =
[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);
正则表达式可能是一个不错的选择 你可以看看,否则,这是一个难题。我试过:
try
{
DateTime.Now.ToString(tmpFormatSpec);
}
catch (Exception)
{
// the format spec is known to be bad
}
try
{
DateTime.Now.ToString(tmpFormatSpec);
}
catch (Exception)
{
// the format spec is known to be bad
}
问题在于日期格式模式非常灵活。甚至不提供日期信息的内容也是允许的(并且我的示例代码不会检测到):
看看这个更好的方法(我还没试过)
另请参见关于这个问题的讨论,以及J.Skeet的评论 这是一个难题。我试过:
try
{
DateTime.Now.ToString(tmpFormatSpec);
}
catch (Exception)
{
// the format spec is known to be bad
}
try
{
DateTime.Now.ToString(tmpFormatSpec);
}
catch (Exception)
{
// the format spec is known to be bad
}
问题在于日期格式模式非常灵活。甚至不提供日期信息的内容也是允许的(并且我的示例代码不会检测到):
看看这个更好的方法(我还没试过)
关于这个问题,请参见J.Skeet的评论 我想补充一点,如果需要在客户端浏览器上进行验证,只需使用正则表达式即可。DateTime.TryParse()需要日期或时间的字符串表示形式作为第一个参数(而不是模式)。它不需要“dd-MM”,因为OP正在提供;它想要OP想要制作的“12-06”,所以你知道它是日期。您想确保它符合日期模式吗?如果是在月初,您如何区分
dd MM
和MM dd
之间的差异。或者,考虑到ho1的评论和您的问题,今天可能有很多信息,所以应该是每分钟一条。我建议您向用户提供选项列表,而不是解析输入的文本。