1

Hi all i have made a script to validate a form all i need to do now is check that the date is not in the past . i have used a set of substr however it does not seem to be working please can someone help. below is my code the date part is towards the bottom.

function validateForm() {
// this part of the script will collate all errors into one should the user leave an input blank
var Fname=document.forms["myForm"]["fname"].value;
var Lname=document.forms["myForm"]["lname"].value;
var address=document.forms["myForm"]["addr1"].value;
var postcode=document.forms["myForm"]["pcode"].value;
var email=document.forms["myForm"]["email"].value;
var number=document.forms["myForm"]["tel"].value;
var date=document.forms["myForm"]["mydate"].value;
if (Fname==null || Fname=="" ||Lname==null || Lname=="" ||address==null || address=="" ||!postcode||!email||!number||( myForm.sex[0].checked == false ) && ( myForm.sex[1].checked == false )||(myForm.age[0].checked == false )&&(myForm.age[1].checked == false )&&(myForm.age[2].checked == false )&&(myForm.age[3].checked == false )&&(myForm.age[4].checked == false )||!date)
  {
  alert("Please make sure all fields are filled or checked correctly out ");
  return false;
  } 
  //end of collating script
  //start of postcode script
 var regPostcode = /^[a-zA-Z]{1,2}\d[\dA-Za-z]? \d[a-zA-Z]{2}$/;
if (!postcode.match(regPostcode))
{
    alert("That Post Code is incorrect, correct way mk4 4tr");
    return false;
}
//end of postcode script
//start of email script
var regEmail =/^\S+@\S+\.\S+$/;

if (!email.match(regEmail))
{
    alert("That email is incorrect");
    return false;
}


// end of email script
// start of phone number script
 var phonestring = /^(?:0|\+44)[12378]\d{8,9}$/;
if (!number.match(phonestring))
{
    alert(" incorrect,correct format 01908234874");
    return false;
}
// end of phone script
//start of gender script

if ( ( myForm.sex[0].checked == false ) && ( myForm.sex[1].checked == false ) ) 
{
alert ( "Please choose your Gender: Male or Female" ); 
return false;
}
// end of gender script
//start of age group script
if((myForm.age[0].checked == false )&&(myForm.age[1].checked == false )&&(myForm.age[2].checked == false )&&(myForm.age[3].checked == false )&&(myForm.age[4].checked == false )){
alert("please select an age group");
return false;
}
// end of age script
//start of datefield
var dateformat=/^(?:(?:31\/(?:0[13578]|1[02])|(?:29|30)\/(?:0[13-9]|1[012])|(?:0[1-9]|1\d|2[0-8])\/(?:0[1-9]|1[0-2]))\/[2-9]\d{3}|29\/02\/(?:[2-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[3579][26])00))$/;
if (!date.match(dateformat))
{
    alert("format incorrect use dd/mm/yyyy make sure you are entering correct days to the month remember 30 days have september, april, june & november, only 28 days in february unless leap year next is 2016");
    return false;
}
var today = new Date();

var courseYear =string.substr(6,4) // use substr or substring to capture the last four digits
var courseMonth =string.substr(3,2) // use substr or substring to capture the four and fifth digits
var courseDay = string.substr(0,2)// use substr or substring to capture the first and second digits

var dateToCompare = new Date(courseYear, courseMonth, courseDay);

if (dateToCompare < today) {
alert("this date is in the past"); 
return false; }

//end of date field
else
{ alert(" Thank you a member of our team will get back to you shortly");

return true;}
}
adam
  • 19
  • 2
  • 9

3 Answers3

2

This doesn't look right:

var courseYear = string.substr(6,4) // use substr or substring to capture the last four digits
var courseMonth = string.substr(3,2) // use substr or substring to capture the four and fifth digits
var courseDay = string.substr(0,2)//

It should be:

var courseYear =date.substr(6,4);
var courseMonth =date.substr(3,2);
var courseDay = date.substr(0,2);

Otherwise it is fine: http://jsfiddle.net/balintbako/mKmaE/

You still might want to consider using a jquery plugin for form validation.

Balint Bako
  • 2,500
  • 1
  • 14
  • 13
  • oh yes i see what i did wrong there thank you i will give that a go should my var today = new Date be date="24/06/2014? – adam Jun 24 '13 at 14:11
  • or `var parts = date.split("/"); courseYear=parts[2];courseMonth=parseInt(parts[1],10); courseDay=parseInt(parts[0],10);` – mplungjan Jun 24 '13 at 14:11
  • `new Date()` without arguments returns always the current date – xmashallax Jun 24 '13 at 14:15
  • yes i think i will use jquery next time however just by changing that to date.substr it is now working one other question , how do i combine all alert errors together instead of one at a time. thank you for your help:) – adam Jun 24 '13 at 14:15
  • Instead of using `alert` you build append all error messages to a string and output this at the end – xmashallax Jun 24 '13 at 14:16
  • Create an error array at the beginning and push the new errors in to it. At the end check if it is empty and display an error if it is not... – Balint Bako Jun 24 '13 at 14:17
  • hi Balint I am new to javascript so im a bit unsure how i do that do you have an email where i can inbox you so you can show me exactly what to do please – adam Jun 24 '13 at 14:18
  • I've updated the fiddle in the answer. Check there, this is not a too elegant solution (an alert). So you might want to create a styled part in the page and then set the content of that element. – Balint Bako Jun 24 '13 at 14:40
0

Not sure a regular expression is the easiest way to validate a date. Consider the answer here: Test if date is valid.

Once you have converted the string into a date object (2 lines of code) you can test if it's in the past using:

if ( d < new Date()) {
  // date is in the past
}

I don't think there's any value in insisting on padded values for date and month, surely d/m/yyyy is sufficient?

Community
  • 1
  • 1
RobG
  • 142,382
  • 31
  • 172
  • 209
0
       $split_array = ($('#MyText_input_1').val());//alert($split_array);
       //ex. 31-Oct-2013
       /*** past date validation script ***/
        var c = $split_array[0]; // this is the format of the date coming in.
        var temp = new Array();
        temp = c.split('-');

        var x = new Date ( temp[1]+" "+temp[0]+", "+temp[2] );
        //alert((new Date().getTime()));
        if (x.getTime() < (new Date().getTime())) {
            alert('past date');
            return false;
        }
       /*** end script ***/
Amol Navsupe
  • 172
  • 1
  • 11