String [] str = {"2010.1.12","09.12.12","09.1.12"};

解决方案 »

  1.   

    使用反向引用进行简化,年份0001-9999,格式yyyy-MM-dd或yyyy-M-d,连字符可以没有或是“-”、“/”、“.”之一。^(?:(?!0000)[0-9]{4}([-/.]?)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]?)0?2\2(?:29))$
      

  2.   


    按楼主标题要求正则应该是^(?:(?!0000)[0-9]{4}\.(?:(?:0[1-9]|1[0-2])\.(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])\.(?:29|30)|(?:0[13578]|1[02])\.31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)\.02\.29)$
    当然,如果是用在Java程序中,把\替换为\\不知道楼主给的三个例子想说明什么,这几个都是不能通过验证的
      

  3.   

    Java 中 我要匹配的是String [] str = {"2010.1.12","09.12.12","09.1.12"};这三种可能性
      

  4.   

    ((20)?(10|09))(\\.(1[0-2])|([1-9]))(\\.(3[0-1])|(2\\d)|1\\d|[1-9])
    刚学正则表达式,试着写了一个。这里没考虑闰月的问题,年的表示也仅仅满足LZ的那个内容,可根据需要完善。
      

  5.   

    var CheckDate=str.match(/^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2})$/);//判断字符串是否为日期YYYY-MM-DD || YYYY/MM/DD 
      

  6.   

    这里用正则不合适,用SimpleDateFormat,依次用“yyyy.M.d”、“yy.MM.d”和“yy.M.d”来parse字符串,只要一个成功即为合法字符串。
    parse得到Date类型值后,统一为"yyyy.MM.dd"输出是很容易的事情。