Avatar billede Six Nybegynder
10. april 2004 - 07:10 Der 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);
   
if (dd < 10) {
    alert("hejhej");
        }
    }

Hvad går der lige galt ?
Avatar billede Six Nybegynder
10. april 2004 - 07:11 #1
Hov, formatet fra formen er ddmmyyyy
Avatar billede roenving Novice
10. april 2004 - 14:25 #2
Flere ting ...

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);

  if(dd!=dat.getDate()||mm!=(dat.getMonth+1)||yyyy!=dat.getFullYear()){
    alert('Fejl i dato');
    //noget mere, måske return false;
  }
  if(+dd<10){
    alert('hejhej')
  }
}
Avatar billede Six Nybegynder
10. april 2004 - 15:42 #3
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 ;)
Avatar billede roenving Novice
10. april 2004 - 16:08 #4
Ovenstående checker om det er en gyldig dato !-)

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);

  if(dd!=dat.getDate()||mm!=(dat.getMonth()+1)||yyyy!=dat.getFullYear()){
    alert('Fejl i dato');
    //noget mere, måske return false;
  }
  if(+dd<10){
    alert('hejhej')
  }
}
Avatar billede roenving Novice
10. april 2004 - 16:12 #5
Øv, jeg havde ikke fået ændret ordentligt til .substr:

  var dd = +dato.substr(0,2);
  var mm = +dato.substr(2,2);
  var yyyy = +dato.substr(4,2);
Avatar billede Six Nybegynder
10. april 2004 - 16:12 #6
Så er jeg på herrens mark :(

Jeg har lige c/p det script du skriver der ;)

Men jeg får fejl i dato, også selvom jeg skriver dags dato.
Avatar billede Six Nybegynder
10. april 2004 - 16:20 #7
jeg tror nu altså det er meget mere simpelt det jeg prøver på, selvom jeg ikke fatter at få det til at virke..

jeg vil:

if(dd>31){blah}
if(mm>12){blah}
if(yyyy<1900 && yyyy>2100){blah}

Men den vil ikke rigtigt :(
Avatar billede roenving Novice
10. april 2004 - 16:38 #8
-- og så kan jeg da anbefale, at du bruger feltet som argument:

Dato: <input type="text" name="foedtdato" onchange="CheckDato(this)">

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;
  }
}

-- hov, et par tavetosser var der også ...
Avatar billede Six Nybegynder
10. april 2004 - 16:46 #9
Hej igen.
Jeg skriver ALT hvad jeg har i min fil. Jeg kan ikke forstå det ikke vil virke.

-------------------------------------------------------------------------------
<?php
function headerstart($title, $overskrift) {
    print("<title>" . $title . "</title>\n");
    print("<h1>" . $overskrift . "</h1>\n<hr />");
    return true;
    }
?>
<head>
<script type="text/javascript">
  function valider() {
       
        //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>

<body>
<?php headerstart("opg 10", "opgave 10"); ?>

<form method="post" name="minform" action="#" onsubmit="return valider();">
<table>
<tr>
  <td>Fornavn:</td>
  <td><input type="text" name="fornavn" maxlength="16" size="16" /></td>
</tr>
<tr>
  <td>Fødselsdag:</td> 
  <td><input type="text" name="fodselsdag" maxlength="8" size="11" onChange="CheckDate(this)"/></td>
</tr>
<tr>
  <td>Email-adresse:</td>
  <td><input type="text" name="email" maxlength="20" size="20" /></td>
</tr>
<tr>
  <td></td>
  <td><input type="Submit" name="submitknap" value="Send" /></td>
</tr>
</table>
</form>
</body>
</html>
---------------------------------------------------------------------------

Bruger i øvrigt også dit forslag til email validering :) den virker tilgengæld fortrinligt hehe
Avatar billede Six Nybegynder
10. april 2004 - 16:49 #10
rettede lige CheckDate(this) til CheckDato(this) ;) men det virker stadig ikke :(
Avatar billede Six Nybegynder
10. april 2004 - 16:58 #11
nu virker det sku!!! ;)

Jeg må åbenbart ikke ligge det inde i min valider funktion. - Den skal jeg så lige have grejet. Jeg takker for hjælpen :)

Smid lige svar - så er pointene dine :)

Jeg accepter senere i aften, er nødsaget til at tage til fødselsdag ;)
Avatar billede roenving Novice
10. april 2004 - 17:12 #12
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);

...

-- og:

<form method="post" name="minform" action="#" onsubmit="return valider(this);">
Avatar billede Six Nybegynder
11. april 2004 - 00:38 #13
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. ;)

Takker mange gange for din hjælp og tålmodighed.
Avatar billede roenving Novice
11. april 2004 - 00:49 #14
Tak for points ;~}

-- 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 !-)
Avatar billede Six Nybegynder
11. april 2004 - 01:09 #15
hmm det layer har jeg så aldrig haft foldet ud hehe.

Takker for oplysningen :)
Avatar billede roenving Novice
11. april 2004 - 01:13 #16
;O)
Avatar billede Six Nybegynder
11. april 2004 - 01:18 #17
roenving - jeg er stødt ind i et andet problem:

//Validering af fornavn
navn = f.fornavn;
  if(navn.value = "" ) {
      alert("Du skal indtaste dit fornavn.");
    navn.select();
  navn.focus();
    return false;
  }

Denne validering gør på en eller anden måde, at "fornavn" feltet ikke kommer med i $_POST arrayet i php. Kan du gennemskue hvad der er galt ?
Avatar billede roenving Novice
11. april 2004 - 01:22 #18
Du har et = for lidt !-)

Javascript sammenligning 'er lig med' hedder ==
Avatar billede Six Nybegynder
11. april 2004 - 01:24 #19
ahh det var toppen. Takker endnu engang ;)
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

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging