10. april 2004 - 07:10Der er
18 kommentarer og 1 løsning
Problem med validering.
Hej. Jeg sidder og leger lidt med en opgave. Jeg er ikke garvet i javascript.
function CheckDato(dato) { var dd = ParseInt(dato.substring(0,2),8); var mm = ParseInt(dato.substring(3,4),8); var yyyy = ParseInt(dato.substring(5,8),8);
Du parser dem som oktal-værdier (,8 i parseInt <-- sådan og ikke med stort p !-)
Og det er nemmest at teste med et Date-objekt, så prøv denne:
function CheckDato(dato) { var dd = dato.substr(0,2); var mm = dato.substring(2,2); var yyyy = dato.substring(4,2); var dat = new Date(yyyy,(+mm-1),dd);
Hej roenving - tak for dit forslag. Men det er en fødselsdato der skal valideres om det er en gyldig dato gyldigt årstal og så videre. Den skal ikke tjekke om datoen er den samme som idag ;)
Javascript Date-objektet er så smart indrettet, at det tillader oprettelse af nye datoer, selv om de principielt er ulovlige, men regulerer selv, så der kun returneres gyldige værdier !-)
-- derfor kan det testes på denne simple måde, og hvis du f.eks. skriver 29142004 vil den teste om 01 er lig 29, om 03 er lig 14 og om 2004 er lig 2005, for Date-objektet har selv reguleret til d. 1/3-2005 ...
Og så bør man vel principielt konvertere til tal (og også checke, at der ikke er tastet forkerte tegn !-)
function CheckDato(dato) { if(!dato.match(/^\d{8}$/)){ alert("Du skal indtaste dato som ddmmåååå"); return false; } var dd = +dato.substr(0,2); var mm = +dato.substring(2,2); var yyyy = +dato.substring(4,2); var dat = new Date(yyyy,(mm-1),dd);
function CheckDato(datofelt) { if(!datofelt.value.match(/^\d{8}$/)){ alert("Du skal indtaste dato som ddmmåååå"); datofelt.select(); datofelt.focus(); return false; } var dd = +datofelt.value.substr(0,2); var mm = +datofelt.value.substr(2,2); var yyyy = +datofelt.value.substr(4,4); var dat = new Date(yyyy,(mm-1),dd);
if(dd!=dat.getDate()||mm!=(dat.getMonth()+1)||yyyy!=dat.getFullYear()){ alert('Fejl i dato!-)\nDu har indtastet en ugyldig dato.'); datofelt.select(); datofelt.focus(); return false; } if(yyyy>2100||yyyy<1900){ alert('Fejl i dato!-)\nDu har indtastet en dato langt ind fremtiden eller i en fjern fortid.'); datofelt.select(); datofelt.focus(); return false; } }
//Dato Validering function CheckDato(datofelt) { if(!datofelt.value.match(/^\d{8}$/)){ alert("Du skal indtaste dato som ddmmåååå"); datofelt.select(); datofelt.focus(); return false; } var dd = +datofelt.value.substr(0,2); var mm = +datofelt.value.substr(2,2); var yyyy = +datofelt.value.substr(4,4); var dat = new Date(yyyy,(mm-1),dd);
if(dd!=dat.getDate()||mm!=(dat.getMonth()+1)||yyyy!=dat.getFullYear()){ alert('Fejl i dato!-)\nDu har indtastet en ugyldig dato.'); datofelt.select(); datofelt.focus(); return false; } if(yyyy>2100||yyyy<1900){ alert('Fejl i dato!-)\nDu har indtastet en dato langt ind fremtiden eller i en fjern fortid.'); datofelt.select(); datofelt.focus(); return false; } } // Check for gyldig E-mail //var str=document.minform.email.value //var filter=/^.+@.+\..{2,3}$/ //if ( ! filter.test(str) ) { // alert("Du skal indtaste en gyldig e-mail adresse") // document.form.email.focus(); // return false; //}; } </script> </head>
Velbekomme, og så ville jeg selvfølgelig lægge den inde i valideringen også:
<script type="text/javascript"> function valider(f) {
//Dato Validering datofelt = f.fodselsdag; if(!datofelt.value.match(/^\d{8}$/)){ alert("Du skal indtaste dato som ddmmåååå"); datofelt.select(); datofelt.focus(); return false; } var dd = +datofelt.value.substr(0,2); var mm = +datofelt.value.substr(2,2); var yyyy = +datofelt.value.substr(4,4);
Hej roenving - Hvis jeg kunne ville jeg gerne give dig flere point. Du fik mig til at forstå mit problem, istedet for bare noget C/P som bare virker. Du lod mig arbejde lidt med sagerne selv, og derved fik jeg også en forståelse af hvad der egentlig sker. ;)
-- og du skal da vide, at du godt kan afsætte flere points indtil du accepterer, for under Funktioner i venstre side er der en mulighed, som hedder 'Afsæt flere points' ...
Til en anden gang, for her var points-mængden jo meget rimelig !-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.