日期数据值要正确,不能出现超出常规的日期,如“2007-2-30”。且符合’yyyy-mm-dd’、’yyyy-m-d’等格式。类似’mm-dd-yyyy’、’mm/dd/yyyy’、’mm.dd.yyyy’、’yyyy/mm/dd’、’yyyy.mm.dd’都是不合法的。
不是从web传入,所以不能用js的方法。谢谢各位

解决方案 »

  1.   

    用正则表达式看格式正确与否
    然后用程序判断是不是合法如果不是web的,简单点通过SimpleDateFormat来parse一下,报错就是不正确直接用正则表达式很难实现
      

  2.   

    Title: Pattern Title [Details] [Test]  
    Expression: (((0[1-9]|[12][0-9]|3[01])([-./])(0[13578]|10|12)([-./])(\d{4}))|(([0][1-9]|[12][0-9]|30)([-./])(0[469]|11)([-./])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([-./])(02)([-./])(\d{4}))|((29)(\.|-|\/)(02)([-./])([02468][048]00))|((29)([-./])(02)([-./])([13579][26]00))|((29)([-./])(02)([-./])([0-9][0-9][0][48]))|((29)([-./])(02)([-./])([0-9][0-9][2468][048]))|((29)([-./])(02)([-./])([0-9][0-9][13579][26])))  
      
    Description: Jason West ([email protected]) date validator with leap years using a strict dd/mm/yyyy (ITALIAN) format 
    Matches: 29/02/2000|||31/01/2000|||30-01-2000 
    Non-Matches: 29/02/2002|||32/01/2002|||10/2/2002 
      

  3.   

    hdhmail2000(禅剑飞雪) ( ) 信誉:100    Blog 这个东西哪里找过来的?怎么这么精辟啊?
      

  4.   

    hdhmail2000(禅剑飞雪)可以写的更具体一点吗?
    DeRoshia(知秋一叶):这个就不用了,如果出现这种情况,也只能说用户不按规矩办事了。
      

  5.   

    date validator with leap years 
    这不写了吗?考虑闰年的了
    另外时间的间隔可以为-./
    同时注意它的格式,他的西方式的,你可以改下,嫌麻烦你可以用这个办法来做,验证的时候把那个年、月、日按你的方式取出来(判断是"-"还是"."还是"/"就可以(indexof就可以),然后再用split就能得到),然后组合成 dd/mm/yyyy给这个正则表达式验证,应该不难了
      

  6.   

    ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$
    不考虑闰年和公元0年等的
    没有hdhmail2000(禅剑飞雪)的考虑全面
    但按你的要求估计够用了
      

  7.   

    try {
          if (要验证的字符串.matches(正则表达式)) {
            System.out.println("The regex matches your string");
          }
          else {
            System.out.println("The regex does not match your string");
          }
        } catch (PatternSyntaxException ex) {
          System.out.println("You have an error in your regular expression:\n" +
                              ex.getDescription());
    }
    //java怎么用正则表达式的
      

  8.   

    这是一个从EXCEL表导入的校验,只允许日期符合’yyyy-mm-dd’、’yyyy-m-d’格式小弟我对hdhmail2000(禅剑飞雪)给的这个表达式一点都看不懂,不知道如何去动手,又不能baidu,google,痛苦啊另外DeRoshia(知秋一叶) 的表达式支持合’yyyy-mm-dd’,但是不支持’yyyy-m-d’格式
      

  9.   

    不知如何下手?不是都写得很明白了吗?      if (要验证的字符串.matches(正则表达式)) {
    这里的正则表达式就是那一长串,带进去不就完了?
      

  10.   

    我试过了,这样做是不对的,无论写什么样的日期,返回的都是false
      

  11.   

    Title: y/m/d Date [Details] [Test]  
    Expression: ^(?:(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(\/|-|\.)(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-9]\d)?\d{2})(\/|-|\.)(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[1,3-9]|1[0-2])\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\d|2[0-8]))))$  
      
    Description: This expression validates dates in the y/m/d format from 1600/1/1 - 9999/12/31. Follows the same validation rules for dates as my other date validator (m/d/y format) located in this library. 
    Matches: 04/2/29|||2002-4-30|||02.10.31 
    Non-Matches: 2003/2/29|||02.4.31|||00/00/00 这个更适合你一点
      

  12.   

    String str = "2007-02-20";
    String regx = "^(?:(?:(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(\\/|-|\\.)(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-9]\\d)?\\d{2})(\\/|-|\\.)(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[1,3-9]|1[0-2])\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\\d|2[0-8]))))$";
             if (str.matches(regx))
    {
    System.out.println("true");
    System.out.println("符合格式");
    }
    else
    {
             System.out.println("false");
    System.out.println("不符合格式");
    }我写的有什么问题吗?
      

  13.   

    另外DeRoshia(知秋一叶) 的表达式支持合’yyyy-mm-dd’,但是不支持’yyyy-m-d’格式
    ---------------------------------------------------------------
    ^\d{4}-(0?[1-9]|1[0-2])-(0?[1-9]|1[0-9]|2[0-9]|3[0-1])$
    呵呵,这部就支持了吗
    import java.util.regex.*;// 表达式对象
    Pattern p = Pattern.compile("^\\d{4}-(0?[1-9]|1[0-2])-(0?[1-9]|1[0-9]|2[0-9]|3[0-1])$");// 创建 Matcher 对象
    Matcher m = p.matcher("your string");// 是否找到匹配
    boolean found = m.find();if( found )
    {
        String foundstring = m.group();
        int    beginPos    = m.start();
        int    endPos      = m.end();
    }
      

  14.   

    如果是写一个类似boolean isDate(String)的方法,还是用SimpleDateFormat,通过setLenient,来check,正则太困难了。比如“历史上丢失的10天”什么的,而且楼上那么长的一个正则,直接用String.matches而不是保留一个编译好的Pattern,效率堪忧
      

  15.   

    我试了试,mm/dd/yyyy的都不好用