[JS] datum validatie: wat gaat er mis?

Pagina: 1
Acties:
  • 126 views sinds 30-01-2008
  • Reageer

  • huistra
  • Registratie: April 2001
  • Laatst online: 08-05-2024
Zit nu al erg lang naar dit stukkie code te koekeloeren maar kom er niet uit: dit scriptje heb ik een tijdje geleden al geschreven en dus hergebruikt maar het gaat mis. Het is de bedoeling dat er alleen doorgegaan mag worden als de datum in dd-mm-jjjj vorm is. Echter, alleen de check of het jaar 4-cijferig is werkt. De andere 2 (dus dd en mm)werken niet. Misschien dat iemand met een frisse blik het wel ziet?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
if (document.form1.gebDatum.value==''){
        alert("Voer a.u.b. uw geboortedatum in.")
        return false;
    }
    var maandArray = new Array(13)
    maandArray[1] = 31; maandArray[2] = 28; maandArray[3] = 31; maandArray[4] = 30; maandArray[5] = 31
    maandArray[6] = 30; maandArray[7] = 31; maandArray[8] = 31; maandArray[9] = 30; maandArray[10] = 31
    maandArray[11] = 30; maandArray[12] = 31;

    
    if (document.form1.gebDatum.value.length == 10 || document.form1.gebDatum.value.length == 9 || document.form1.gebDatum.value.length == 8){
        var dateArray = document.form1.gebDatum.value.split("-");
        if(dateArray.length == 3 && (dateArray[0].length==2 || dateArray[0].length==1) && (dateArray[1].length==2 || dateArray[1].length==1) && dateArray[2].length==4){    
            if(isNaN(dateArray[0]) || isNaN(dateArray[1]) || isNaN(dateArray[2])){
                alert("Datum graag in formaat DD-MM-JJJJJ");
                return false;
            }//ifsluit
            else{
                //ter berekening van de getallen
                D0 = parseInt(dateArray[0]);
                D1 = parseInt(dateArray[1]);
                D2 = parseInt(dateArray[2])
                    if ((D2 % 4 == 0 && D2 % 100 != 0) || (D2 % 400 == 0)){
                    maandArray[2] = 29;
                    }
                if (D0 > maandArray[D1] ){
                    alert("Datum graag in formaat DD-MM-JJJJ");
                    return false;                   
                }
                
                if(dateArray[0]>31 || dateArray[1]>12){
                    alert("Datum graag in formaat DD-MM-JJJJJ");
                    return false;                   
                }  
            }//elsesluit    

        }//ifsluit
        else{
                alert("Datum graag in formaat DD-MM-JJJJJ");
                return false;
            }   
    }//ifsluit
    else{
            alert("Datum graag in formaat DD-MM-JJJJJ");
            return false;
        }

mijn excuses voor het nu al vern**ken van de lay-out

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

voordat we allemaal een heel test-traject uit gaan voeren is het misschien handig als je aangeeft wat er mis gaat en bij welke invoer.

heb zelf effe snel een paar dingen geprobeerd en hij lijkt het te doen.

Today's subliminal thought is:


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

kan je een dat tjek niet makkelijker doen met een regExp?
code:
1
2
3
4
5
6
7
8
9
10
function check(arg) {
    if(!new RegExp("[0-9]{2}[-][0-9]{2}[-][0-9]{4}").exec(arg)) {
        return 'foute datum' 
    }   return 'goeie datum'
}

// test
while(confirm('nog een keer?')) {
    alert(check(prompt('datum aub','dd-mm-jjjj')));
}

moet je ff uitbouwen dat ie niet dingen als 87-65-4500 pikt, maar het principe is korter sneller en duidelijker imo.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • RM-rf
  • Registratie: September 2000
  • Laatst online: 11:35

RM-rf

1 2 3 4 5 7 6 8 9

misschien is date validatie wat eenvoudiger als je gebruikt maakt van het date object (na eerst een regEx eroverheen te halen, zoals in Clay's voorbeeld)

door een new Date(yyyy,mm,dd) aan te maken en hiervan vervolgens je waardes voor de verschillende
dateObj.getDate
dateObj.getMonth (wel +1 doen, januari start als 0)
dateObj.getFullYear
te vergelijken, heb je ook een redelijk goede check, en is het geheel eenvoudiger te scripten (zeker overzichtelijker)

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen