/**
*校验字符串是否为日期型
*返回值:
*如果为空,定义校验通过,         返回true
*如果字串为日期型,校验通过,       返回true
*如果日期不合法,          返回false   参考提示信息:输入域的时间不合法!(yyyy-MM-dd)
*/
function checkIsValidDate(str)
{
//如果为空,则通过校验
    if(str == "")
        return true; var pattern = /^((\d{4})|(\d{2}))-(\d{1,2})-(\d{1,2})$/g;
if(!pattern.test(str))
return false;
var arrDate = str.split("-");
if(parseInt(arrDate[0],10) < 100)
arrDate[0] = 2000 + parseInt(arrDate[0],10) + "";
var date =  new Date(arrDate[0],(parseInt(arrDate[1],10) -1)+"",arrDate[2]);
if(date.getYear() == arrDate[0]
   && date.getMonth() == (parseInt(arrDate[1],10) -1)+""
   && date.getDate() == arrDate[2])
return true;
else
return false;
}//~~~
usage:if(checkIsValidDate("2004-12-12"))
    alert("yes");

解决方案 »

  1.   

    给你一个一句正则的。。
    re=/^[12]{1}(\d){3}[-][01]?(\d){1}[-][0123]?(\d){1}$/
      

  2.   

    运行一下下面的程序看看。。
    <script language="javascript">
    re=/^[12]{1}(\d){3}[-][01]?(\d){1}[-][0123]?(\d){1}$/;
    alert(re.test("2004-8-1"));
    alert(re.test("2004-08-01"));
    alert(re.test("2004-8-12"));
    alert(re.test("2004-11-1"));
    alert(re.test("2004-22-42"));
    </script>
      

  3.   

    给你一个看着更清晰直观的
    <script language="javascript">
    re=/^[12]{1}(\d){3}[-][01]?(\d){1}[-][0123]?(\d){1}$/;
    testalert(re.test("2004-8-1"));
    testalert(re.test("2004-08-01")); 
    testalert(re.test("2004-8-12"));
    testalert(re.test("2004-11-1"));
    testalert(re.test("2004-22-42"));function testalert(obj)
    {
     if (obj) alert("数据合法!");
     else
     alert("数据不合法!");
    }
    </script>
      

  4.   

    xzq686(瞬) 的检查是不完全的,比如2004-2-39都可以通过
      

  5.   

    我还是同意 LxcJie(肖冲*爱*捷捷) 的做法,毕竟这个正则式即使能写出来也不会比他的那个程序简单,想一想润年可以用正则式表示吗?
      

  6.   

    <script>
    function isDate(str)
    {
        var d = new Date(str)
        return !isNaN(d)
    }
    </script>
      

  7.   

    function isDate(str)
    {
        var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
        result = str.match(reg);
        if(result == null)return false;
        var d = new Date(result[1],result[3]-1,result[4])
        var newStr = d.getFullYear()+result[2]+(d.getMonth()+1)+result[2]+d.getDate();
        return str == newStr
    }
      

  8.   

    try
        {
        hdate=new Date(str)
        }
    catch(e)
        {
        alert('错误');
        }
      

  9.   

    <script language="JavaScript">
    String.prototype.IsDate=function()
    {
    var str=this;
        var reg =/^(\d+)-(\d{1,2})-(\d{1,2})$/;    
        var r=str.match(reg);    
        if(r==null)return false;    
        r[2]=r[2]-1;    
        var d=new Date(r[1],r[2],r[3]);    
        if(d.getFullYear()!=r[1])return false;    
        if(d.getMonth()!=r[2])return false;    
        if(d.getDate()!=r[3])return false;    
        return true;  
    }
    </script>