Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#。日期模式的验证_C#_Validation - Fatal编程技术网

C#。日期模式的验证

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 =

在我的应用程序中,用户可以通过在文本框中输入日期来指定日期模式。此模式用于记录消息。例如,如果用户指定“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 = 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的评论和您的问题,今天可能有很多信息,所以应该是每分钟一条。我建议您向用户提供选项列表,而不是解析输入的文本。