date validation

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • pradeepjain
    Contributor
    • Jul 2007
    • 563

    date validation

    [CODE=javascript]<script language = "Javascript ">
    /**
    * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
    */
    // Declaring valid date character, minimum year and maximum year
    var dtCh= "/";
    var minYear=1900;
    var maxYear=2100;

    function isInteger(s){
    var i;
    for (i = 0; i < s.length; i++){
    // Check that current character is number.
    var c = s.charAt(i);
    if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
    }

    function stripCharsInBag (s, bag){
    var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){
    var c = s.charAt(i);
    if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
    }

    function daysInFebruary (year){
    // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
    }
    function DaysArray(n) {
    for (var i = 1; i <= n; i++) {
    this[i] = 31
    if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
    if (i==2) {this[i] = 29}
    }
    return this
    }

    function isDate(dtStr){
    var daysInMonth = DaysArray(12)
    var pos1=dtStr.inde xOf(dtCh)
    var pos2=dtStr.inde xOf(dtCh,pos1+1 )
    var strMonth=dtStr. substring(0,pos 1)
    var strDay=dtStr.su bstring(pos1+1, pos2)
    var strYear=dtStr.s ubstring(pos2+1 )
    strYr=strYear
    if (strDay.charAt( 0)=="0" && strDay.length>1 ) strDay=strDay.s ubstring(1)
    if (strMonth.charA t(0)=="0" && strMonth.length >1) strMonth=strMon th.substring(1)
    for (var i = 1; i <= 3; i++) {
    if (strYr.charAt(0 )=="0" && strYr.length>1) strYr=strYr.sub string(1)
    }
    month=parseInt( strMonth)
    day=parseInt(st rDay)
    year=parseInt(s trYr)
    if (pos1==-1 || pos2==-1){
    alert("The date format should be : mm/dd/yyyy")
    return false
    }
    if (strMonth.lengt h<1 || month<1 || month>12){
    alert("Please enter a valid month")
    return false
    }
    if (strDay.length< 1 || day<1 || day>31 || (month==2 && day>daysInFebru ary(year)) || day > daysInMonth[month]){
    alert("Please enter a valid day")
    return false
    }
    if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
    alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
    return false
    }
    if (dtStr.indexOf( dtCh,pos2+1)!=-1 || isInteger(strip CharsInBag(dtSt r, dtCh))==false){
    alert("Please enter a valid date")
    return false
    }
    return true
    }

    function ValidateForm(){
    var dt=document.frm Sample.txtDate
    if (isDate(dt.valu e)==false){
    dt.focus()
    return false
    }
    return true
    }

    </script>
    [/CODE]

    this is the javascript i am using ..it works properly but if there is a apace at beginning or at last of date it gives "Please enter a valid 4 digit year" which is correct but my client wants the space to be ignored and no msg to be dispalyed ..how to do it..

    Thanks,
    Pradeep
    Last edited by gits; Jan 16 '08, 08:24 AM. Reason: added code tags
  • Delerna
    Recognized Expert Top Contributor
    • Jan 2008
    • 1134

    #2
    use the ltrim function (Use google for specifics)
    Change

    [CODE=javascript]function ValidateForm(){

    //this
    var dt=document.frm Sample.txtDate



    if (isDate(dt.valu e)==false){
    dt.focus()
    return false
    }
    return true
    }[/CODE]

    to something like

    [CODE=vb]var dt=ltrim(docume nt.frmSample.tx tDate);
    [/CODE]

    .....
    Last edited by gits; Jan 16 '08, 08:26 AM. Reason: added code tags

    Comment

    • pradeepjain
      Contributor
      • Jul 2007
      • 563

      #3
      Originally posted by Delerna
      use the ltrim function (Use google for specifics)
      Change
      function ValidateForm(){

      //this
      var dt=document.frm Sample.txtDate



      if (isDate(dt.valu e)==false){
      dt.focus()
      return false
      }
      return true
      }






      to something like
      var dt=ltrim(docume nt.frmSample.tx tDate);


      .....

      if i use it it escapes the space but the javascript doesnot work only..how to correct it;

      Comment

      • Delerna
        Recognized Expert Top Contributor
        • Jan 2008
        • 1134

        #4
        sorry what i gave you is not java syntax, it is vb/sql syntax

        try dt.value.replac e(" ","")

        this replaces all the spaces with an empty string

        Comment

        • pradeepjain
          Contributor
          • Jul 2007
          • 563

          #5
          Originally posted by Delerna
          sorry what i gave you is not java syntax, it is vb/sql syntax

          try dt.value.replac e(" ","")

          this replaces all the spaces with an empty string


          [CODE=javascript]function ValidateForm(){
          var dt=document.frm Sample.txtDate
          if (isDate( dt.value.replac e(" ","") )==false){
          dt.focus()
          return false
          }
          return true
          }[/CODE]

          hey look i have put ur code in the function near the isDate calling function but not working.....any other idea....

          Thanks,
          Pradeep
          Last edited by gits; Jan 16 '08, 08:27 AM. Reason: added code tags

          Comment

          • pradeepjain
            Contributor
            • Jul 2007
            • 563

            #6
            Originally posted by pradeepjain
            [CODE=javascript]function ValidateForm(){
            var dt=document.frm Sample.txtDate
            if (isDate( dt.value.replac e(" ","") )==false){
            dt.focus()
            return false
            }
            return true
            }[/CODE]

            hey look i have put ur code in the function near the isDate calling function but not working.....any other idea....

            Thanks,
            Pradeep


            Really srry its working but only for a single space not for multiple spaces ..how to do tht..

            Comment

            • Delerna
              Recognized Expert Top Contributor
              • Jan 2008
              • 1134

              #7
              did you notice that there are no closing semicolons in your isDate function?
              is the code making it into the isDate function and then failing or is it failing at the isDate function call?

              Comment

              • gits
                Recognized Expert Moderator Expert
                • May 2007
                • 5390

                #8
                hi ...

                you could use the following function:

                [CODE=javascript]function trim_value(val) {
                var re = /\s/g;

                return val.replace(re, '');
                }
                [/CODE]
                then in your validate-function call:

                [CODE=javascript]var dt = trim_value(docu ment.frmSample. txtDate);[/CODE]
                kind regards

                Comment

                • pradeepjain
                  Contributor
                  • Jul 2007
                  • 563

                  #9
                  hii Thanks for every ones help..
                  i finally used this

                  function trim_value(val) {
                  var re = /\s/g;
                  return val.replace(re, '');
                  }

                  function validatestring( ){
                  var dt=document.veh icleform.Date
                  if (isDate(trim_va lue(dt.value))= =false){
                  dt.focus()
                  return false
                  }
                  return true
                  }


                  and it is working fine..Thanks Delerna and gits


                  Thanks,
                  pradeep

                  Comment

                  Working...