Open source software security

Javascript Single Date Check Script

30 November -0001

This function checks to make sure that the field named 'date' in the form 'theForm' on the page is in correct 'mm/dd/yyyy' format. Call it with 'return fixit()' in an onSubmit in the form tag. Below this function is another that checks for yyy-mm-dd format a little more elegantly by using regular expressions.

function checkIt()
	{
/* Javascript date check by Justin Klein Keane  Copyright (C) 2004 

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
	   
*/
	
	/* Note the date field is named 'date' in the form 'theForm' */
	var theDateString = document.theForm.date.value;
	var LenDateString = document.theForm.date.value.length;
	var monthEndsAt = theDateString.search('/');
	if (monthEndsAt < 2)
		{alert ("Month must be two digits");
		 return false;}
	var LenRestOfString = (LenDateString - monthEndsAt);
	var monthYearString = theDateString.substr(monthEndsAt+1, LenRestOfString);
	var YearBeginsAt = monthYearString.search('/');
	if (YearBeginsAt < 2)
		{alert ("Day must be two digits");
		 return false;}
	
	var endYearAt = (monthYearString.length) - YearBeginsAt + 1;
	var theYearString = monthYearString.substr(YearBeginsAt+1, endYearAt);
	if ((LenDateString < 8) || (LenDateString > 10))
		{alert ("Improperly formatted date string (mm/dd/yyyy)");
		 return false;
		}
	// check to make sure the first slash is in the right place 
	else if ((theDateString.substr(1,1) != "/") && (theDateString.substr(2,1) != "/"))
		{alert ("Improperly formatted date string (mm/dd/yyyy)");
		 alert ("The slashes aren't in the right place");
		 return false;
		}
	// check to make sure the month is not zero
	else if ((theDateString.substr(2,1) == '/') && (theDateString.substr(0,2) < 1))
		{alert ("Improperly formatted date string (mm/dd/yyyy)");
		 return false;
		}
	// check to make sure the month is not greater than 12
	else if ((theDateString.substr(2,1) == '/') && (theDateString.substr(0,2) > 12))
		{alert ("Improperly formatted date string (mm/dd/yyyy)");
		 return false;
		}
	// check to make sure the second slash is in the right place
	else if ((monthYearString.substr(1,1) != "/") && (monthYearString.substr(2,1) != "/"))
		{alert ("Improperly formatted date string (mm/dd/yyyy)");
		 alert ("The slashes aren't in the right place");
		 return false;
		}
	// check to make sure the day isn't zero
	else if ((theDateString.substr(2,1) == '/') && (theDateString.substr(3,2) < 1))
		{alert ("Improperly formatted date string (mm/dd/yyyy)");
		 return false;
		}
	// check to make sure the day isn't greater than 32
	
	else if ((theDateString.substr(2,1) == '/') && (theDateString.substr(3,2) > 32))
		{alert ("Improperly formatted date string (mm/dd/yyyy)");
		 return false;
		}
	// check to make sure the year is four digits
	else if (theYearString.length != 4)
		{alert ("The year needs to be four digits");
		 return false;
		}
	else
		{
		return true();
		}
	}


function valiDate() {
/* Javascript date check by Justin Klein Keane  Copyright (C) 2004 

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
	   
*/
var myRegex = new RegExp("^[0-9]{4}\-([0][0-9]|[1][0-2])\-([0-2][0-9]|[3][0-1])$");
if (document.theForm.date.value.match(myRegex))
	{//valid date format, check for valid date
	var theDay = Math.round(document.theForm.date.value.substr(8,2));
	var theMonth = Math.round(document.theForm.date.value.substr(5,2));
	var theYear = Math.round(document.theForm.date.value.substr(0,4));
	
	if ((theYear%4 == 0) && (theDay > 29) && (theMonth == 2)) {
		alert ("Not a valid date.");
		return false;
		}
	else if ((theYear%4 != 0) && (theDay > 28) && (theMonth == 2)) {
		alert ("Not a valid date.");
		return false;
		}
	else if ((theDay > 30) && (theMonth == 4 || theMonth == 6 || theMonth == 0 || theMonth == 11)) {
		alert ("Not a valid date.");
		return false;
		}
	else {
		return true;
		}
	}
else
	{
	alert ("Date not in correct yyyy-mm-dd format of the date specified does not exist.");
	return false;
	}
}