2013-01-15 91 views
0

我在窗体上有一个日期字段。日期字段中的日期必须在今天的日期之后,而不是过去。它也必须在从今天起的30天之内。因此,如果今天是2013年1月15日,那么表格只能在15/02/2013之后的30天内接受任何日期,因此14/04/2007加上30天!验证日期字段

任何请帮助正确的JavaScript代码?我是一个稚嫩的人,对于如何达到这个目标没有任何线索。

+0

@Chris jQuery框架?认为不是 –

回答

1

我想你需要的东西是这样的:http://jsfiddle.net/hqNxW/1/

和代码...

的JavaScript

var output = document.getElementById('messageOutput'); 
document.getElementById('validate').onclick = function() { 
    var value = document.getElementById('date').value; 
    if (!validateDate(value)) { 
     notify('Invalid date format'); 
    } else { 
     if (!validateDateRange(value)) { 
      notify('The date should be after today but not more than 29 days!'); 
     } else { 
      notify('Valid date'); 
     } 
    } 
} 

function notify(msg) { 
    output.innerHTML = msg; 
} 

function validateDate(date) { 
    return (/^\d{2}-\d{2}-\d{4}$/).test(date); 
} 

function validateDateRange(inputDate) { 
    var now = new Date(), 
     after30Days = new Date().setDate(now.getDate() + 30) 
     date = new Date(inputDate); 
    return date > now && date < after30Days; 
} 

HTML

<input type="text" id="date" /> <button id="validate">Validate</button> 
<div id="messageOutput">Enter a date in the following format: mm-dd-yyyy</div> 
+0

所有这些单独功能的重点是什么?你可以把它们放在一个单一的功能中。 –

+0

是的,我可以但validateDate是更通用的功能,可以在以后重用。为了一致性,我在不同函数中分隔了范围值。 –

+1

我宁愿为HTML5浏览器设置''来自动显示日历,并将验证和javascript验证一起作为后备。 –

0

您的验证功能应该是这样的:

function validateDateField() 
{ 
    var result=true;  // optimistic.... 

    var now=new Date(); 
    var thisMonth=now.getMonth(); 
    var maxDate=new Date(); 
    maxDate.setMonth(thisMonth+1); 

    //---------getting the user input: 
    var dateStr=document.getElementById('dateField').value; 

    //change "dd/mm/yyyy" format to "yyyy/mm/dd" format: 
    dateStr = dateStr.replace(" ",""); 
    dateStr = dateStr.substr(6,4)+"/"+dateStr.substr(3,2)+"/"+dateStr.substr(0,2); 

    //---------validation part: 
    document.getElementById('feadBackLable').innerHTML=""; 
    try 
    { 
    var userDate=new Date(Date.parse(dateStr)); 
    if(userDate < now || userDate > maxDate) 
    { 
      result=false; 
      document.getElementById('feedBackLable').innerHTML="your date should be one of the next 30 days"; 
    } 
    } 
    catch(err) 
    { 
    result=false; 
    document.getElementById('feadBackLable').innerHTML="please enter a valid date: dd/mm/yyyy"; 
    } 
    //--------------------------- 
    return result; 

} // function 
+0

谢谢你..它工作正常.. –