Avatar billede dramsgaard Nybegynder
22. maj 2003 - 12:26 Der er 28 kommentarer og
2 løsninger

validering af dato

Jeg har fundet flg. funktion til at valider et datofelt. Mit problem er at den valdier efter MM-DD-ÅÅ istedet for DD-MM-ÅÅ.
Jeg har prøvet at rette i den, men kan ikke helt finde ud af det sidste....jeg får alertboksen "Ulovlig Dato2"
Er der nogen der lige kan rette det sidste til så den valider efter DD-MM-ÅÅ ?

</script>
<script language="JavaScript">
<!--
  function validatedate(f) {
    if (f.fodt.value=="") {
      alert("Du skal skrive en dato");
      return false;
    }
    if (f.fodt.value.length!=8) {
      alert("Datoen skal skrives på formen MM-DD-ÅÅ");
return false;
    }
    if (f.fodt.value.charAt(2)!="-" || f.fodt.value.charAt(5)!="-") {
      alert("Datoen skal skrives på formen MM-DD-ÅÅ");
      return false;
    }
    var dd=parseInt(f.fodt.value.substring(0,2));
    var mm=parseInt(f.fodt.value.substring(3,5));
    var yy=parseInt(f.fodt.value.substring(6,8));
    if (dd<1 || dd>31 || mm<1 || mm>12) {
      alert("Ulovlig dato");
      return false;
    }
    if (yy>=70) { yyyy=yy+1900 } else { yyyy=yy+2000; }
    d=new Date(yyyy,mm-1,dd,0,0,0,0);
    if (d.getFullYear()!=yyyy || d.getDate()!=dd || (d.getMonth()+1)!=mm) {
      alert("Ulovlig dato2");
      return false;
    }
    return true;
  }
//-->
</script>
Avatar billede roenving Novice
22. maj 2003 - 12:53 #1
årstal med 4 cifre -- og den kan ikke klare 29/2-2100 eller 1900, men ellers:

function validateDate(txt){
  var reg=/^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/;
  return (txt.match(reg)!=-1);
}

fundet på Regular Expression Library, www.regexlib.com
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 12:58 #2
roenving >> er det ikke muligt bare at lave den om jeg har? det er vel ik så meget der skal laves om....er det ik bare en af de sidste linjer?
jeg er ikke så god til det her JS endnu
Avatar billede roenving Novice
22. maj 2003 - 13:30 #3
-- jeg syns els det var så ret med en tre-linjers funktion -- uanset den ene linje er på 300+ tegn -- forøvrigt har den også checket om det er en gyldig dato og vil virke altid (bortset fra den ene mulighed, som kommer 3 gange på 400 år) ... men

function validatedate(f) {
    if (f.fodt.value=="") {
      alert("Du skal skrive en dato");
      return false;
    }
    if (f.fodt.value.length!=8) {
      alert("Datoen skal skrives på formen DD-MM-ÅÅ");
return false;
    }
    if (f.fodt.value.charAt(2)!="-" || f.fodt.value.charAt(5)!="-") {
      alert("Datoen skal skrives på formen DD-MM-ÅÅ");
      return false;
    }
    var dd=parseInt(f.fodt.value.substring(0,2));
    var mm=parseInt(f.fodt.value.substring(3,5));
    var yy=parseInt(f.fodt.value.substring(6,8));
    if (dd<1 || dd>31 || mm<1 || mm>12) {
      alert("Ulovlig dato");
      return false;
    }
    if (yy>=70) { yyyy=yy+1900 } else { yyyy=yy+2000; }
    d=new Date(yyyy,mm-1,dd,0,0,0,0);
    if (d.getFullYear()!=yyyy || d.getDate()!=dd || (d.getMonth()+1)!=mm) {
      alert("Ulovlig dato2");
      return false;
    }
    return true;
  }

-- hvad er der galt ???

Jeg får også fejlmeddelelser i stribe, men af en underlig type hvor 11-06-56 er god nok (og datodelene er: 11-6-56) men 11-08-56 ikke er (med datodelene: 11-0-56) ???
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 13:39 #4
hmm er ik helt sikker på jeg forstår det du siger...
men den valider da stadig som MM-DD-ÅÅ ik??
Avatar billede roenving Novice
22. maj 2003 - 13:42 #5
Ha, jeg prøvede lige det her -- og jeg kan _ikke_ finde fejlen:

<script language="JavaScript">
<!--
  function validatedate(f) {
    txt=f.fodt.value;
    if (f.fodt.value=="") {
      alert("Du skal skrive en dato");
      return false;
    }
    if (f.fodt.value.length!=8) {
      alert("Datoen skal skrives på formen DD-MM-ÅÅ");
return false;
    }
    if (f.fodt.value.charAt(2)!="-" || f.fodt.value.charAt(5)!="-") {
      alert("Datoen skal skrives på formen DD-MM-ÅÅ");
      return false;
    }
    var dd=parseInt(f.fodt.value.substring(0,2));
    var mm=parseInt(f.fodt.value.substring(3,5));
    var yy=parseInt(f.fodt.value.substring(6,8));
    if (dd<1 || dd>31 || mm<1 || mm>12) {
      alert("Ulovlig dato\n"+dd+"-"+mm+"-"+yy+"\n"+txt);
      return false;
    }
      alert("Lovlig dato\n"+dd+"-"+mm+"-"+yy+"\n"+txt);

    if (yy>=70) { yyyy=yy+1900 } else { yyyy=yy+2000; }
    d=new Date(yyyy,mm-1,dd,0,0,0,0);
    if (d.getFullYear()!=yyyy || d.getDate()!=dd || (d.getMonth()+1)!=mm) {
      alert("Ulovlig dato2 dato\n"+dd+"-"+mm+"-"+yyyy+"\n"+txt);
      return false;
    }
      alert("Lovlig dato2 dato\n"+dd+"-"+mm+"-"+yyyy+"\n"+txt);
    return true;
  }
//-->
</script>

Prøv så at indtaste 11-06-56 11-08-56 11-8x-56

11/8 er ulovlig de andre er lovlige ...

-- smid du de to linjer ind jeg gav dig (der er nemlig også checket for underlige tegn) og lav evt. nogle mere beskrivende fejlmeddelelser ved i stedet for:

  return (txt.match(reg)!=-1);

at skrive:

  if (txt.match(reg)!=-1){
    return true;
  }
  alert("Datoen skal skrives DD-MM-ÅÅÅÅ");
  return false;

hth
jes
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 13:49 #6
HMM det er jo kun når man skriver xx-08-xx eller xx-09-xx den laver fejl
Avatar billede helle_fred Nybegynder
22. maj 2003 - 13:54 #7
<script language="JavaScript">
<!--
  function validatedate(f) {
    if (f=="") {
          alert("Du skal skrive en dato");
          return false;
    }
    if (f.length!=8||f.charAt(2)!="-" || f.charAt(5)!="-") {
          alert("1.Datoen skal skrives på formen MM-DD-ÅÅ");
    return false;
    }
    var dd=Math.floor(f.substring(0,2));
    var mm=Math.floor(f.substring(3,5));
    var yy=Math.floor(f.substring(6,8));
    if (dd<1 || dd>31 || mm<1 || mm>12) {
      alert("Ulovlig dato");
      return false;
    }
    if (yy>=70)  yyyy=yy+1900; else  yyyy=yy+2000
    d=new Date(yyyy,mm-1,dd,0,0,0,0);
    if (d.getFullYear()!=yyyy || d.getDate()!=dd || (d.getMonth()+1)!=mm) {
      alert("Ulovlig dato2");
      return false;
    }
alert ("lovlig dato dd-mm-åå")
    return true;
  }
</script>
<form>
<input type="text" length=10 onchange="validatedate(this.value)">
</form>
Avatar billede roenving Novice
22. maj 2003 - 13:56 #8
Den fortæller ikke om fejl, hvis den første karakter i de 3 delstrenge er et tal -- prøv f.eks.:
1--1--0-

-- mange mærkværdigheder slipper igennem, fordi den slet ikke checker om der er bogstaver i ...
Avatar billede roenving Novice
22. maj 2003 - 13:58 #9
>>helle_fred

prøv at teste 1q-1g-0v
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 14:00 #10
men man kan vel sætte det her ind:
<script>
      function check_key(key){
          if (key > 44 && key < 46 || key > 47 && key < 58 ){
              return true;
          } else {
              return false;
          }
      }
    </script>
så kan man jo kun taste tal og -
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 14:07 #11
helle_fred >>
når man bruger din får man da hele tiden:
alert("1.Datoen skal skrives på formen MM-DD-ÅÅ");
Avatar billede helle_fred Nybegynder
22. maj 2003 - 14:09 #12
min kode fortæller om fejb ved både
1--1--0-
og
1q-1g-0v
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 14:10 #13
jamen man får da fejl lige meget hvad man skriver nu....
Avatar billede helle_fred Nybegynder
22. maj 2003 - 14:10 #14
dramsgaard - når jeg prøver min kode med fx 09-12-55 siger den: lovlig dato...
Avatar billede helle_fred Nybegynder
22. maj 2003 - 14:12 #15
engang imellem sker der noget, når man kopierer og paster kode ind i eksperten - se derfor http://www.akira.ruc.dk/~hf/y.htm
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 14:17 #16
heh jeg får den her fejl lige meget hvad nu:
alert("1.Datoen skal skrives på formen MM-DD-ÅÅ");

hvorfor laver den '/' når jeg trykker på '-' ??
Avatar billede helle_fred Nybegynder
22. maj 2003 - 14:19 #17
mon ikke det er dig, der laver '/'?
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 14:21 #18
selv hvis jeg undlader at skrive noget får jeg:
alert("1.Datoen skal skrives på formen MM-DD-ÅÅ");

nej når jeg trykker på tasten '-' bliver det til '/' over alt på siden!!! hvad sker der?
Avatar billede helle_fred Nybegynder
22. maj 2003 - 14:24 #19
Prøv at kopiere denne streng ud:

31-12-55

og paste den ind på pladsen i inputfeltet.

Du lader til at have nogle problemer med dit keybord - måske har du Num-lock slået til. Scriptet virker naturligvis ikke, hvis du skriver / i stedet for - imellem datoelementerne
Avatar billede helle_fred Nybegynder
22. maj 2003 - 14:26 #20
- håber du finder ud af det, jeg er desværre nødt til at smutte :-)
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 14:29 #21
jeg genstartede DreamWeaver og IE, og nu skriver den '-' normalt igen
men jeg får stadig den samme fejl uanset hvad jeg skriver!
Avatar billede helle_fred Nybegynder
22. maj 2003 - 14:40 #22
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 14:40 #23
jow nu tror jeg det virker.....men kan man ikke sætte den ind i form tag'et istedet??
fordi når den står nede ved input tag'et kan man bare trykke ok til fejlen, og derefter trykke submit igen, så bliver den accepteret selvom der er fejl i.
Avatar billede helle_fred Nybegynder
22. maj 2003 - 14:44 #24
<script language="JavaScript">
<!--
  function validatedate(f) {
    if (f=="") {
          alert("Du skal skrive en dato");
          return false;
    }
    if (f.length!=8||f.charAt(2)!="-" || f.charAt(5)!="-") {
          alert("Datoen skal fylde otte karakterer - eller datoen skal indeholde skilletegnet '-' mellem elementerne");
    return false;
    }
    var dd=Math.floor(f.substring(0,2));
    var mm=Math.floor(f.substring(3,5));
    var yy=Math.floor(f.substring(6,8));
    if (dd<1 || dd>31 || mm<1 || mm>12) {
      alert("Ulovlig dato: dag skal ligge mellem 1 og 31, måned mellem 1 og 12");
      return false;
    }
    if (yy>=70)  yyyy=yy+1900; else  yyyy=yy+2000
    d=new Date();
    d.setDate(dd);
    d.setMonth(mm-1)
    d.setYear(yyyy)
alert ("YES! lovlig dato \n"+ d.toLocaleString())
    return true;
  }
</script>
<form onsubmit="validatedate(i.value)">
<input name="i" type="text" length=10 >
</form>
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 14:56 #25
Nu virker den....men problemet er når der bliver submittet med en forkert værdi, så kommer der en fejl, men når man trykker ok til den, så fortsætter den, og det må den IKKE da det er til en opdateringsfunktion til en database

<script language="JavaScript">
<!--
function validatedate(f) {
    if (f=="") {
          alert("Du skal skrive en dato");
          return false;
    }
    if (f.length!=8||f.charAt(2)!="-" || f.charAt(5)!="-") {
          alert("Datoen skal fylde otte karakterer - eller datoen skal indeholde skilletegnet '-' mellem elementerne");
    return false;
    }
    var dd=Math.floor(f.substring(0,2));
    var mm=Math.floor(f.substring(3,5));
    var yy=Math.floor(f.substring(6,8));
    if (dd<1 || dd>31 || mm<1 || mm>12) {
      alert("Ulovlig dato: dag skal ligge mellem 1 og 31, måned mellem 1 og 12");
      return false;
    }
    if (yy>=70)  yyyy=yy+1900; else  yyyy=yy+2000
    d=new Date();
    d.setDate(dd);
    d.setMonth(mm-1)
    d.setYear(yyyy)

    return true;
  }

//-->
</script>

<form name="opret" onsubmit="validatedate(fodt.value)" action="update.asp?method=Add" method="Post">
<input type="text" name="fodt" size="20">
</form>
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 15:02 #26
mangler der ik noget return false halløjsa til sidst i funktionen?
Avatar billede roenving Novice
22. maj 2003 - 15:31 #27
Jo:

form name="opret" onsubmit="return validatedate(fodt.value)" action="update.asp?method=Add" method="Post">
Avatar billede dramsgaard Nybegynder
22. maj 2003 - 16:36 #28
Jeg tror det virker som det skal nu...men må nok hellere lige teste det lidt mere....
roenving >> kan du ikke lige ligge et svar, så kan du os' få lidt point : )
Avatar billede roenving Novice
22. maj 2003 - 19:41 #29
jamen, det er jo rart '-)
Avatar billede roenving Novice
23. maj 2003 - 01:02 #30
Tak for points ;~}
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester