我现在有一个正则已经可以只允许两种格式的日期输入了; “2000 6 27 11:38:05”或者      “2000 6 27”表达式为:^\d{4} (0?[1-9]|1[0-2]) (0?[1-9]|[12]\d|3[12])( (0?\d|1\d|2[0-4]):(0?\d|[1-5]\d):(0?\d|[1-5]\d))?$现在只要一个不但可以允许“2000 6 27 11:38:05”或者“2000 6 27”这样的,还想要同时可以允许“2000-6-27 11:38:05”或者“2000-6-27”(就是中间加个'-'),也就是说想同时允许这四种日期格式,能做到吗?只要给正确答案,我经过验证,马上给全部分数。谢谢。

解决方案 »

  1.   

    ^[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)?$
      

  2.   

    ^\d{4}[ |-](0?[1-9]|1[0-2])[ |-](0?[1-9]|[12]\d|3[12])( (0?\d|1\d|2[0-4]):(0?\d|[1-5]\d):(0?\d|[1-5]\d))?$
      

  3.   

    给你个含闰年验证验证的,自己改吧(100年内有效)// <summary>
    /// 检验字符串是否是有效的日期(含闰年验证)
    ///  Returns:true有效的日期 false不有效的日期
    /// </summary> 
    /// <param name = "p_str"> 需要检验的字符串 </param>
    /// <returns> true有效的日期 false不有效的日期 </returns>
    public static bool IsDate(string p_str)
    {
        Regex objReg = new Regex(@"^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|
                                (((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|
                                [2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|
                                [13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$");
        return objReg.IsMatch(p_str);
    }
      

  4.   

    ((?<T1>(?:(?:[13579][26]|[2468][048])[0]{2}|\d{2}(?:[13579][26]|[2468][048]|[02468][48]))(?<M>[-/\._]?)[0]?(?:(?:[3578]|[1][02]?)\k<M>(?:[3][0-1]|[1-2]?[0-9])|(?:[469]|[1]{2})\k<M>(?:[3][0]|[1-2]?[0-9])|[2]\k<M>[0-2]?[0-9])))?((?<T2>\d{4}(?<M>[-/\._]?)[0]?(?:(?:[3578]|[1][02]?)\k<M>(?:[3][0-1]|[1-2]?[0-9])|(?:[469]|[1]{2})\k<M>(?:[3][0]|[1-2]?[0-9])|[2]\k<M>[0-2]?[0-8])))?\s*(?:[01]?[0-9]|[2][0-3])\s*:\s*[1-5][0-9]\s*:\s*[1-5][0-9]
    2006-11-30   11 : 29  : 59
    2006-11-30   09 : 59  : 59
    2005-11-31   N
    2006-11-29
    2006-12-31   Y
    2006-2-20
    2006-12-32   N
    2006-2-2
    2006-02-2
    2000-2-28
    2000-2-29
    1999-2-28
    1999-2-29   N
    2006/02/3
    2006-2-3
    2000-3-31
    1996-02-2
    2006.02.3
    2006/12/14
    2006.12.14
    2006_12_14
    20061214
    2006/02/2
    2006-02-13
    2005/3/3
    2006-03-31
    2000-2-29    Y
    2000-1-31
    2006-2-29    N