Avatar billede sth Novice
11. august 2004 - 21:19 Der er 9 kommentarer og
1 løsning

validering af flere felter

hej jeg har en form, hvor jeg har et felt der hedder:
kundenummer  (tekst felt og skal starte med 00 (2 x nul) og skal ydfyldes med 8 karaktere
fra_dato    (Dato felt skal være en gyldig dato)
til_dato    (Dato felt skal være en gyldig dato med format dd-mm-yyy)
deskrivelse  tekst felt)



er der nogen der kan lave noget der kan lave en validering af disse felter
Avatar billede ldanielsen Nybegynder
11. august 2004 - 22:51 #1
Her er en function der checkker dato mens man taster:

<form name=myForm>
<input size=30 name=Dato value="" onKeyUp="checkDateInput(this.form.Dato)" onChange="checkDateInput(this.form.Dato)">

</form>
<script>

function checkDateInput(f){
    for (i=1;i<=f.value.length;i++)    doValidateIt(f, i)
   
}


function doValidateIt(f, n){
    theStr = f.value.substring(0, n)
    //sætter Jan 2000 ind hvis datoen er ufuldstændig,
    //så der dannes en streng i formen (d)d-(m)m-yyyy;
    var tempArr = theStr.split("-")
    var strDate = tempArr[0]
    var strMonth = (tempArr.length > 1) ? ((tempArr[1] == "" || tempArr[1] == "0") ? "1" : tempArr[1]) : "1"
    //strYear checkkes først når der er 4 tegn, derfor chekker jeg for ikke-numerisk nu:
    var strYear = (tempArr.length > 2) ? ((tempArr[2].length < 4  && /^[0-9]+$/.test("0" + tempArr[2]) ) ? "2000" : tempArr[2]) : "2000"
   
    //den fremkomne dato checkkes;
    var isValid = (doTestDato(strDate + "-" + strMonth + "-" + strYear))
   
    //Lidt oprydning: Der må ikke være "--" i strengen og der må ikke være tre "-":
    var isValid = (isValid && theStr.indexOf("--") == -1 && tempArr.length < 4)

    if (!isValid) f.value = theStr.substring(0, n - 1)
    }

function doTestDato(str){
    var validDato = true
    if (/^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$/.test(str) == false){
        validDato = false
    }else{
        var tempArr = str.split("-")
        var d = new Date(tempArr[2] + "/" + tempArr[1] + "/" + tempArr[0])
        if (d.getDate() != tempArr[0] || d.getMonth() != tempArr[1] - 1) validDato = false
        }
    return validDato
    }

</script>

Den anden, du siger at det skal starte med 00, skal de sidste 6 være tal?
Avatar billede sth Novice
11. august 2004 - 22:55 #2
nej der skal bare tastes 8 tal i alt men de 2 første skal vare 00
Avatar billede roenving Novice
11. august 2004 - 23:57 #3
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Tomt dokument</title>
<meta name="keywords" content="søgeord adskilt af komma">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
html,body{height:100%;margin:0px;border:0px;padding:0px;font-family:tahoma,verdana,arial,sans-serif;font-size:small;}
</style>
<script language="javascript" type="text/javascript">
function valider(f){
  if(!f.kundenr.value.match(/^00\d{6}$/)){
    alert('Kundenummeret er ikke gyldigt');
    f.kundenr.select();
    f.kundenr.focus();
    return false;
  }
  var dato = f.fra_dato.value,dat;
  if(!dato.match(/^\d{2}-\d{2}-\d{4}$/)){
    alert('Startdatoen er ikke gyldig en gyldig dato');
    f.fra_dato.select();
    f.fra_dato.focus();
    return false;
  }else{
    dato = dato.split("-");
    dat = new Date(+dato[2],(+dato[1]-1),+dato[0]);
    if(dat.getFullYear()!=+dato[2]||dat.getMonth()+1!=+dato[1]||dat.getDate()!=+dato[0]){
      alert('Startdatoen er ikke gyldig en gyldig dato');
      f.fra_dato.select();
      f.fra_dato.focus();
      return false;
    }
  }
  var dato = f.til_dato.value,dat;
  if(!dato.match(/^\d{2}-\d{2}-\d{4}$/)){
    alert('Slutdatoen er ikke gyldig en gyldig dato');
    f.til_dato.select();
    f.til_dato.focus();
    return false;
  }else{
    dato = dato.split("-");
    dat = new Date(+dato[2],(+dato[1]-1),+dato[0]);
    if(dat.getFullYear()!=+dato[2]||dat.getMonth()+1!=+dato[1]||dat.getDate()!=+dato[0]){
      alert('Startdatoen er ikke gyldig en gyldig dato');
      f.til_dato.select();
      f.til_dato.focus();
      return false;
    }
  }
  if(f.beskrivelse.value==""||f.beskrivelse.value==f.beskrivelse.defaultValue){
    alert('Beskrivelse skal udfyldes');
    f.beskrivelse.select();
    f.beskrivelse.focus();
    return false;
  }
  return true;
}
</script>
</head>

<body>
<form id="minForm" name="minForm" action="gem.asp" method="post" onsubmit="return valider(this);">
<table style="width:555px;border-collapse:collapse;">
  <tr>
    <td style="width:100px;">
      Kundenummer: </td>
    <td style="width:455px;">
      <input id="kundenr" name="kundenr" type="text" value="Kundenr" onfocus="if(this.value==this.defaultValue)this.value='00';" onblur="if(this.value==''||this.value=='00')this.value=this.defaultValue;" size="8"></td>
  </tr>
  <tr>
    <td>
      Startdato: </td>
    <td>
      <input id="fra_dato" name="fra_dato" autocomplete='off' type="text" value="dd-mm-yyyy" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="10"></td>
  </tr>
  <tr>
    <td>
      Slutdato: </td>
    <td>
      <input id="til_dato" name="til_dato" autocomplete='off' type="text" value="dd-mm-yyyy" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="10"></td>
  </tr>
  <tr>
    <td colspan="2">
      Beskrivelse:<br>
      <textarea name="beskrivelse" style="width:550px;" rows="6" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;">Beskriv eventen</textarea></td>
  </tr>
  <tr>
    <td style="width:150px;"></td>
    <td>
      <input id="Send" name="Send" type="submit" value="Send"></td>
  </tr>
</table>
</form>
</body>

</html>
Avatar billede sth Novice
12. august 2004 - 14:01 #4
perfekt det var lige sådan det skulle virke, tak for det.

Smider du lige et svar
Avatar billede roenving Novice
12. august 2004 - 14:19 #5
Velbekomme '-)
Avatar billede sth Novice
18. august 2004 - 07:45 #6
jeg beklager, jeg havde glemt at jeg ikke havde fået accepteret
men her er de, og tak for hjælpen
Avatar billede sth Novice
18. august 2004 - 07:53 #7
Øv jeg har lidt problemer
jeg har prøvet at rette lidt i det selv, og det virker også næsten, men når jeg ikke taster noget i kundernr. kommer der også en box, og når jeg trykker ok på denne så bliver jeg sendt til siden gem.asp !

jeg har flyttet lidt rundt og oprettet en "ny"

så den nu ser sådan ud:
function valider(f){


    if(!f.rapport_varenummer.value.match(/^1\d{6}$/)){
    alert(' Varenummer skal have 7 karakterer og starte med 1');
    f.rapport_varenummer.select();
    f.rapport_varenummer.focus();
    return false;
  }
  if(!f.rapport_kundenr.value.match(/^00\d{6}$/)){
    alert('Kundenummeret skal have 8 karakterer og starte med 00 ');
    f.kundenr.select();
    f.kundenr.focus();
    return false;
  }
  if(f.rapport_initialer.value==""||f.rapport_initialer.value==f.rapport_initialer.defaultValue){
    alert('Initialer skal udfyldes');
    f.rapport_initialer.select();
    f.rapport_initialer.focus();
    return false;
  }
  var dato = f.rapport_fra_dato.value,dat;
  if(!dato.match(/^\d{2}-\d{2}-\d{4}$/)){
    alert('Startdatoen er ikke gyldig en gyldig dato');
    f.rapport_fra_dato.select();
    f.rapport_fra_dato.focus();
    return false;
  }else{
    dato = dato.split("-");
    dat = new Date(+dato[2],(+dato[1]-1),+dato[0]);
    if(dat.getFullYear()!=+dato[2]||dat.getMonth()+1!=+dato[1]||dat.getDate()!=+dato[0]){
      alert('Startdatoen er ikke gyldig en gyldig dato');
      f.rapport_fra_dato.select();
      f.rapport_fra_dato.focus();
      return false;
    }
  }
  var dato = f.rapport_til_dato.value,dat;
  if(!dato.match(/^\d{2}-\d{2}-\d{4}$/)){
    alert('Slutdatoen er ikke gyldig en gyldig dato');
    f.rapport_til_dato.select();
    f.rapport_til_dato.focus();
    return false;
  }else{
    dato = dato.split("-");
    dat = new Date(+dato[2],(+dato[1]-1),+dato[0]);
    if(dat.getFullYear()!=+dato[2]||dat.getMonth()+1!=+dato[1]||dat.getDate()!=+dato[0]){
      alert('Startdatoen er ikke gyldig en gyldig dato');
      f.rapport_til_dato.select();
      f.rapport_til_dato.focus();
      return false;
    }
  }
 
  return true;
}


jeg vil gerne have valideringen i denne rækkefølge:
1. kundenummer
2. beskrivelse
3. fra_dato
4. til_dato

Er det noget du kan løse, jeg er selvf. villig til at oprette et nyt spørgsmål så du kan få lidt for det
Avatar billede sth Novice
18. august 2004 - 08:35 #8
Jeg har løst problemet
if(!f.rapport_kundenr.value.match(/^00\d{6}$/)){
    alert('Kundenummeret skal have 8 karakterer og starte med 00 ');
    f.kundenr.select();
    f.kundenr.focus();
    return false;
  }
skulle selvf. have været

if(!f.rapport_kundenr.value.match(/^00\d{6}$/)){
    alert('Kundenummeret skal have 8 karakterer og starte med 00 ');
    f.rapport_kundenr.select();
    f.rapport_kundenr.focus();
    return false;
  }
Avatar billede roenving Novice
18. august 2004 - 11:50 #9
Tak for point ;~}
Avatar billede sth Novice
22. september 2009 - 22:35 #10
hej roenving  dette spørgsmål er godt nok meget gammel men kan du hjælpe en ven i nøden og se lidt på http://www.eksperten.dk/spm/887296


mvh

sth
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