c# - 如何验证不同格式的日期

标签 c# asp.net regex

我得到了一个正则表达式来验证一个日期,如下所示

^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2- 9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[ 2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579] [26])|((16|[2468][048]|[3579][26])00))))$

但是,如果我按以下方式输入日期,这将有效 20/03/2012 .. 同样,我想添加不同的验证,它们可以一起用于以下

20032012 (ddmmyyyy) 03202012(mmddyyyy)

谁能帮帮我

最佳答案

使用DateTime.TryParseExact - 有一个采用格式字符串数组的重载,因此您可以提供所有可能的格式。

来自 MSDN - DateTime.TryParseExact Method (String, String[], IFormatProvider, DateTimeStyles, DateTime) :

string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", 
                   "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", 
                   "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", 
                   "M/d/yyyy h:mm", "M/d/yyyy h:mm", 
                   "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm"};
string[] dateStrings = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM", 
                        "5/1/2009 6:32:00", "05/01/2009 06:32", 
                        "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00"}; 
DateTime dateValue;

foreach (string dateString in dateStrings)
{
   if (DateTime.TryParseExact(dateString, formats, 
                              new CultureInfo("en-US"), 
                              DateTimeStyles.None, 
                              out dateValue))
      Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
   else
      Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
}
// The example displays the following output:
//       Converted '5/1/2009 6:32 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 6:32:05 PM' to 5/1/2009 6:32:05 PM.
//       Converted '5/1/2009 6:32:00' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32:00 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 06:32:00' to 5/1/2009 6:32:00 AM.

关于c# - 如何验证不同格式的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10850970/

相关文章:

regex - 使用 Sublime Text 确保 LaTeX 文档中每行一个句子

c# - 以优雅的方式合并两个 IEnumerables

c# - 何时使用 javascript 而不是创建 aspx 页面?

c# - 错误时显示标签 (HTML CSS)

asp.net - 在执行大型操作时向 View 发送更新的策略

jquery - 如何同时替换字符和数字?

r - R 正则表达式中的双冒号

c# - 简单协方差似乎不适用于 c# 泛型

c# - revEng 命令现在需要提供程序。应该通过什么?

c# - 使用 smtp 对 Intranet 的用户进行身份验证