用正则表达式匹配输入的时间是否正确,包括年月日,时分。谢谢!

解决方案 »

  1.   

    (((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[1-9]))|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1-9]))|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9]))|(^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29))|(^([3579][26]00)([-\/\._])(0?2)([-\/\._])(29))|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29))|(^([2-9][0-9][0][48])([-\/\._])(0?2)([-\/\._])(29))|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29))|(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/\._])(29))|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\._])(29))|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)))((\s+(0?[1-9]|1[012])(:[0-5]\d){0,2}(\s[AP]M))?$|(\s+([01]\d|2[0-3])(:[0-5]\d){0,2})?$))它可以验证
    日期:是闰年的情况,一年只有12个月,一个月内有多少天(包括闰年)
    时间:可以验证一天只有24小时、60分、60秒,AM、PM
      

  2.   

    日期时间最好不用正则来检查有效性。只检查是否格式符合。
    DateTime.ParseExact
      

  3.   

    DateTime.TryParse
    考虑闰年
    ^(?:(?:(?:(?:(?:1[6-9]|[2-9][0-9])?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:0229))|(?:(?:(?:1[6-9]|[2-9][0-9])?[0-9]{2})(?:(?:(?:0[13578]|1[02])31)|(?:(?:0[13-9]|1[0-2])(?:29|30))|(?:(?:0[1-9])|1[0-2])(?:0[1-9]|1[0-9]|2[0-8]))))$
      

  4.   

    .............简单点的^[0-9]{4}-(((0[13578]|(10|12))-(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)-(0[1-9]|[1-2][0-9]|30)))($|\s([0-1]\d|[2][0-3])\:[0-5]\d\:[0-5]\d)  
      

  5.   

    ^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578] )|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\ s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([1 3579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9] )|(2[0-8]))))))"日期部分
    (\s(((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$
    时间部分
    够清楚了吧?
      

  6.   

    ^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[0-9])|(1[0-9])|(2[0-3]))\:(([0-5][0-9])|([0-9]))(((\s)|(\:(([0-5][0-9])|([0-9]))))?)))?$
      

  7.   

    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="*"  ValidationExpression="^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$" ControlToValidate="TextBox1"></asp:RegularExpressionValidator>
    是这样的吧?
      

  8.   

    ......
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>//这是一个TextBox控件,看的懂吧!<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="*" ValidationExpression="^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$" ControlToValidate="TextBox1"></asp:RegularExpressionValidator>RegularExpressionValidator  //是一个验证控件,
    ErrorMessage="*"  //验证出错是显示的提示,可以等于 * ,也可以等于其他的,包括文字,
    ValidationExpression="^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$"  // ValidationExpression= “输入的正则表达式”
     ControlToValidate="TextBox1" //验证的是哪个控件!
    这样的解释够清楚了不??
      

  9.   

    一般用
    DateTime.Parse(string);
    DateTime.TryParse(string,out DateTime);
              string time = "2010-7-13 13:33:55";
              DateTime dt = DateTime.Parse(time);  //如果有错误会抛出异常
              time = "2010-7-13 13:33:23223";
              if (DateTime.TryParse(time, out dt))  //如果有异常不会抛出异常
              {
                   //执行
              }
      

  10.   

    我只是不明白,判断时间的正则表达式为什么这样写?他的用法我知道。。^(?:19|20)[0-9][0-9]年
    -(?:(?:0[1-9])|(?:1[0-2]))月
    -(?:(?:[0-2][1-9])|(?:[1-3][0-1])) 日
     (?:(?:[0-2][0-3])|(?:[0-1][0-9])) 时
    :[0-5][0-9]  分 00-59
    :[0-5][0-9]$ 秒 00-59
    后面的,分,秒 理解,
    知道(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
    前面的年 ,月,日,时,不怎么理解,表达式具体什么含义啊?当然他们的取值范围是知道的。麻烦您了!
      

  11.   


    您好,使用您的代码 ,为什么会报错说:
    DateTime dt = DateTime.Parse (time);
    该字符串未被识别为有效的 DateTime呢?谢谢!这是在aspx.cs中的代码,TextBox1是前台的空间,用于输入时间!
                  string time = this.TextBox1.Text.ToString ();
                DateTime dt = DateTime.Parse (time);            if (DateTime.TryParse(time, out  dt))
                {
                    Alter(this.Page, "时间格式正确");
                }
                else
                {
                    Alter(this.Page, "时间格式不正确");
                }
      

  12.   

    就是用正则来限制年需要时19xx年或20xx年
    月限制在1~12之间
    日限制在1~31之间
      

  13.   

    说明一下:正则是可以写出正确验证平年闰年日期的。不懂就别瞎说。只是很复杂而已,那个正则太复杂了,实在是记不得,wish131020给出的感觉上应该可以。
      

  14.   

    闰年计算:int leapyear(int year)
    {
         if ((0 == year%4 && 0 != year%100) ||
             (0 == year%100 && 0 ==year%400) &&
                               (0 != year%3200))
             {
                 return (0);
             }
         else
             {
                 return (1);
             }     
    }同时只能被4或100其中一个整除的是闰年。
    如果正则可以实现,那可能是我不知道的写法了。我想不出如何能实现。即便真能实现,想一下,要根据是否是闰年,来匹配2月的天,这将依然是个很复杂的事情。我假设你毅力坚强,依然实现了这个(我所知道的,要么js的|符号分割匹配2种情况,要么用.net的平衡组)。那你这个正则将不少于200个字符,这样的正则和用简单正则匹配一下,在用DateTime.Parse来检验规则,哪个合理呢?
    (不懂就别瞎说,这句我赞同。)