Ja skide simpelt blev det jo altså ikke, men prøv at putte det her i head: ---8<---------- <script language="javascript" type="text/javascript"> function isSkudAAr(y){ if (y<1700) { return false; } y = y-1700; if (y%400==0) { return true; } if (y%100==0) { return false; } if (y%4==0) { return true; } return false; }
function validerDato(str){ // test pattern var pattern = /^(\d{2}\-){2}\d{4}\s(\d{2}\:){2}\d{2}$/; if (!pattern.test(str)) { return "Strengen er af forkert format"; }
// ekstract numbers var tmpArray = str.split(" "); var datoStr = tmpArray[0]; var tidStr = tmpArray[1]; var datoArray = datoStr.split("-"); var tidArray = tidStr.split(":"); var dato = parseInt(datoArray[0]); var month = parseInt(datoArray[1]); var year = parseInt(datoArray[2]); var hours = parseInt(tidArray[0]); var minutes = parseInt(tidArray[1]); var seconds = parseInt(tidArray[2]); var skudAAr = isSkudAAr(year);
//test month if ((month<01)||(month>12)) { return "måned er forkert"; }
//test dato if (dato<1) { return "for lav dato" } if ((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12)){ // 31 days month if (dato>31) { return "der er kun 31 dage i måned "+month; } } else if ((month==4)||(month==6)||(month==9)||(month==11)){ // 30 days month if (dato>30) { return "der er kun 30 dage i måned "+month; } } else { // feb if (skudAAr){ if (dato>29) { return "der er kun 29 dage i feb på skudår" } } else { if (dato>28) { return "der er kun 28 dage i feb på almindelige år" } } }
// test hours if ((hours<0)||(hours>23)) { return "time er forkert"; }
// test minutes if ((minutes<0)||(minutes>59)) { return "minutter er forkerte"; }
// test seconds if ((seconds<0)||(seconds>59)) { return "sekunder er forkerte"; }
// nothing went wrong return "er en valid dato!"; } </script> ---8<----------
og det her i body (til at teste :) ) ---8<---------- <script language="javascript" type="text/javascript"> var eksempelDatoer = ["16-02-2004 16:15:00","29-02-2004 16:15:00", "29-02-2005 16:15:00","16-13-2004 16:15:00", "blob","29-02-2100 16:15:00","29-02-1900 16:15:00", "31-01-2004 16:15:00","31-04-2004 16:15:00", "00-07-2004 16:15:00","31-04-2004 00:15:00", "31-01-2004 16:15:00","30-04-2004 16:60:00" ];
for (var i=0;i<eksempelDatoer.length;i++){ document.write(eksempelDatoer[i]+" - "+validerDato(eksempelDatoer[i])+"<br>"); } </script> ---8<----------
Hvis jeg misforstod opgaven, og du kun ville teste for formatet "DD-MM-YYYY hh:mm:ss", så kan du nøjes med pattern testen: var pattern = /^(\d{2}\-){2}\d{4}\s(\d{2}\:){2}\d{2}$/; if (!pattern.test(str)) { return "Strengen er af forkert format"; }
...og hvis du ikke ønsker den udpindede forklaring på hvad der er galt, kan du bare bytte alle fejlstrengene ud med false og strengen "er en valid dato!" ud med true. Så har du en funktion du kan bruge som følger: if (validerDato(minDatoStreng)) { hvad der skal ske når datoen er valid } else { hvad der skal ske når datoen er forkert }
hej o-zone det ser godt ud men kan du få det til at virke i samme funktion som denne her funktion.
<script type="text/JavaScript"> function valider () { if ( form1.oprettetdato.value.length > 0 ) { } else { alert ("Du har glemt af udfylde feltet oprettet den."); form1.oprettetdato.focus(); return false; };
if ( form1.oprettetaf.value.length > 0 ) { } else { alert ("Du har glemt af udfylde hvem sagen er oprettet af."); form1.oprettetaf.focus(); return false; };
<script type="text/JavaScript"> function valider () { if ( form1.oprettetdato.value.length == 0 || !validerDato(form1.oprettetdato.value)) { alert ("Du har glemt af udfylde feltet oprettet den."); form1.oprettetdato.focus(); return false; };
if ( form1.oprettetaf.value.length == 0 ) { alert ("Du har glemt af udfylde hvem sagen er oprettet af."); form1.oprettetaf.focus(); return false; };
form1.submit(); }; function validerDato(str){ // test pattern var pattern = /^(\d{2}\-){2}\d{4}\s(\d{2}\:){2}\d{2}$/; if (!pattern.test(str)) { return "Strengen er af forkert format"; }
// ekstract numbers var t = str.split(" "); var d = t[0].split("-"); var s = t[1].split(":"); var dt = new Date(d[2],(+d[1]-1),d[0],s[0],s[1],s[2]); return dt.getFullYear()==d[2]&&dt.getMonth()+1==d[1]&&dt.getDate()==d[0]&&dt.getHours()==s[0]&&dt.getMinutes()==s[1]&&dt.getSeconds()!=s[2]; } </script>
En dumme-fejl i return-linjen i validerDato, jeg havde overset en konsekvensrettelse af den sidste sammenligning, som også skulle være == ...
<script type="text/JavaScript"> function valider (f) { if ( f.oprettetdato.value.length == 0 || !validerDato(f.oprettetdato.value)) { alert ("Du har glemt af udfylde feltet oprettet den."); f.oprettetdato.focus(); return false; };
if ( f.oprettetaf.value.length == 0 ) { alert ("Du har glemt af udfylde hvem sagen er oprettet af."); f.oprettetaf.focus(); return false; };
//f.submit(); return true; }; function validerDato(str){ // test pattern var pattern = /^(\d{2}\-){2}\d{4}\s(\d{2}\:){2}\d{2}$/; if (!pattern.test(str)) return false;
// ekstract numbers var t = str.split(" "); var d = t[0].split("-"); var s = t[1].split(":"); var dt = new Date(d[2],(+d[1]-1),d[0],s[0],s[1],s[2]); var ch = dt.getFullYear()==d[2]&&dt.getMonth()+1==d[1]&&dt.getDate()==d[0]&&dt.getHours()==s[0]&&dt.getMinutes()==s[1]&&dt.getSeconds()==s[2]; return ch; } </script>
jeg kan først tjekke det i morgen men du har da lavet mere om end blot == hvad med f.oprettetdato istedet for form1.oprettetdato og så er de 4 sidste linier da lavet en del om???
-- her er den direkte til at kopiere, men jeg har altså gjort den browser-kompatibel med den linje først i koden ...
-- og jeg har ikke forstået, at du absolut vil lave en form.submit() i koden, når farmen automatisk submittes, når du laver en return true !-)
<script type="text/JavaScript"> function valider () { f = document.form1; if ( f.oprettetdato.value.length == 0 || !validerDato(f.oprettetdato.value)) { alert ("Du har glemt af udfylde feltet oprettet den."); f.oprettetdato.focus(); return false; };
if ( f.oprettetaf.value.length == 0 ) { alert ("Du har glemt af udfylde hvem sagen er oprettet af."); f.oprettetaf.focus(); return false; };
f.submit(); //return true; } function validerDato(str){ // test pattern var pattern = /^(\d{2}\-){2}\d{4}\s(\d{2}\:){2}\d{2}$/; if (!pattern.test(str)) return false;
// ekstract numbers var t = str.split(" "); var d = t[0].split("-"); var s = t[1].split(":"); var dt = new Date(d[2],(+d[1]-1),d[0],s[0],s[1],s[2]); var ch = dt.getFullYear()==d[2]&&dt.getMonth()+1==d[1]&&dt.getDate()==d[0]&&dt.getHours()==s[0]&&dt.getMinutes()==s[1]&&dt.getSeconds()==s[2]; return ch; } </script>
roenving jeg skal have det så det passer direkte ind i koden, da jeg også har en masse andet der skal valideres
Synes godt om
Ny brugerNybegynder
Din løsning...
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.