Avatar billede Slettet bruger
21. januar 2006 - 01:47 Der er 26 kommentarer og
1 løsning

Form validering af disse felter

Jeg skal bruge et stykke javascript oppe i <head> som validerer mine formfelter grundigt. Formfelterne er følgende:

fornavn
efternavn
tlfnr
postnr
by
adresse
email
fødselsdag (bestående af 3 select bokse - dag,måned,år)

- Validering af fornavn, efternavn og by må value ik være mindre end 1 eller mere end 50.

- Adresse må value ik være mindre end 1 eller mere end 100

- Telefon nummer skal være tal og ikke mere 8 tal...
- Postnr skal være tal og ikke mere 4 tal...

- Email skal tjeckes for '@' .xxx hvis muligt. Evt. kan du komme med et forslag.

- Er det muligt at validere fødselsdags select boksene, specielt ÅR så ham der tilmelder sig ikke er under 18 år.

----------------------------------------------------

Håber det kan lade sig gøre og nogen vil hjælpe... :-)
Avatar billede roenving Novice
21. januar 2006 - 02:11 #1
-- det er sagtens muligt at udføre alle dine ønsker, men det meste er slave-arbejde, og det kan du vel selv lave ...

-- hvis dine select-bokse har et navn, skal jeg gerne lave rutinen, der tester om datoen giver en alder, der er over 18 år (bemærk, at der skal testtes på hele datoen, for en fra 1988 behøver jo ikke være over 18 !-)

Princippet i testen for indhold i et felt, og checket for tilstrækkelige tal ser sådan ud:

<script type="text/javascript">
function validering(f){
  if(!f.fornavn.value.match(/^\w.{0,49}$/)){
    alert('Du skal udfylde feltet med dit fornavn!');
    f.fornavn.focus();
    return false;
  }

  //tilføj selv de andre felter, hvor der 'bare' skal være indhold !-)

  if(f.tlfnr.value!=''&&!f.tlf.value.match(/^\d{8}$/))    {       
    alert('Telefonnummer skal angives med 8 cifre!');
    f.tlfnr.focus();
    return false;
  }

  //tilføj selv de andre felter, hvor der skal være et antal cifre !-)

  if(!f.email.value.match(/^.*?@\w[\w\.-]*?\.[a-z]{2,6}$/){
    alert('Emailadresse er ikke en gyldig mail-adresse!');
    f.email.focus();
    return false;
  }
  return true;
}
</script>

-- og så skal form-tagget f.eks. se sådan ud:

<form action=" ... " method="post" onsubmit="return validering(this);">
Avatar billede Slettet bruger
21. januar 2006 - 02:28 #2
Hej Roenving og tak for den hurtigere respons. :-))

Ang select boksne som angiver personens fødselsdag har jeg pt. følgende values inde. Navnene på boksene står først.

dag (values der kan vælges imellem: 1-31)
maaned (values der kan vælges imellem: 1-12)
aar (values af årstal er pt sat til 1916-1988)

Ang. email feltet, vil den så checke før @ og efter? Evt så en email der ser således ud er iorden: dfsdf@sdfs.sdf.com ?
Avatar billede roenving Novice
21. januar 2006 - 02:45 #3
Ifølge den gældende standard for email-adresser (iflg. rfc 2821 for smtp, http://rfc.net/rfc2821.html#s2.3.10 !-) må mail-hosten selv bestemme, hvad der må eller skal stå foran @-tegnet, så det testes der slet ikke for i ovenstående, men ellers er det et must, at der står et @-tegn, derefter noget, som er et ordtegn, evt. noget mere gyldigt i et domæne-navn og til sidst et punktum efterfulgt af 2-6 bogstaver (det længste nugældende top-level-domæne hedder .museum !-)

-- alders-checket kan f.eks. se således ud:

  var d = f.dag.value;
  var m = f.maaned.value;
  var a = f.aar.value;
  var dato = new Date(a, m-1, d);
  var nu = new Date();
  if(dato.getFullYear() != a || dato.getMonth()+1 != m || dato.getDate() != d){
    alert('Datoen er ikke en gyldig dato!');
    f.dag.focus();
    return false;
  }
  if(nu.getFullYear()-18<a || (nu.getFullYear()-18==a && nu.getMonth()+1<m) || (nu.getFullYear()-18==a && nu.getMonth()+1==m && nu.getDate()<d)){
    alert('Du skal være over 18 for at deltage i denne konkurrence!');
    f.dag.focus();
    return false;
  }
Avatar billede tjp Mester
21. januar 2006 - 02:59 #4
>>roenving
Hvad er ideen med '*?' i email-tjekket? Spørgsmålstegnet forekommer mig at være lidt overflødigt her.
Avatar billede roenving Novice
21. januar 2006 - 03:08 #5
Uden spørgsmålstegnet ville den acceptere f.eks. jkhgk@kjhgjh@noget.museum ...

-- fordi regexps pr. definition altid forsøger at lave den længste match, og netop et dobbelt @-tegn er en af de få no-nos !-)
Avatar billede tjp Mester
21. januar 2006 - 04:07 #6
Det ændre et spørgsmålstegn da ikke på - for at undgå flere @ kunne den evt. se sådan ud:
/^(.[^@])*@\w[\w\.-]*\.[a-z]{2,6}$/
Avatar billede Slettet bruger
21. januar 2006 - 12:15 #7
Jeg prøver lige at teste det Roenving... Alders checket hvordan skal den funktion hedde oppe i head? Noget ala

if(!f.fodselsdag.value.match()){ ....
.... ?
}

:-)
Avatar billede Slettet bruger
21. januar 2006 - 12:50 #8
Der kommer en script fejl åbenbart... der står linie 48... og det er ved

if(!f.email.value.match(/^(.[^@])*@\w[\w\.-]*\.[a-z]{2,6}$/){
   
Den siger tegnet ')' var ventet
Avatar billede Slettet bruger
21. januar 2006 - 13:01 #9
Den vil godt validere tekstfelterne men ikke dem hvor der skal være et minimums antal cifre... her ved postnr og tlfnr

if(t.tlfnr.value!=''&&!t.tlfnr.value.match(/^\d{8}$/)){       
    alert('Telefonnummer skal angives med 8 cifre!');
    t.tlfnr.focus();
    return false;
  }

if(t.postnr.value!=''&&!t.postnr.value.match(/^\d{4}$/)){       
    alert('Postnummer skal angives med 4 cifre!');
    t.postnr.focus();
    return false;
  }
Avatar billede roenving Novice
21. januar 2006 - 14:22 #10
>>tjp

-- tjah, det er jo bare et spørgsmål om stil, min er faktisk kortere, selvom din kan forenkles ganske kraftigt:

/^[^@]*@\w osv.

-- og der mangler ganske rigtigt en slut-parantes (jeg må se at lære det, for jeg laver den næsten hver gang i min egen kode også !-)

  if(!f.email.value.match(/^.*?@\w[\w\.-]*?\.[a-z]{2,6}$/)){

-- og alderschecket skal bare sættes ind i valideringsfunktionen  !-)
Avatar billede Slettet bruger
21. januar 2006 - 14:38 #11
Okay så virkede email funktionen. :-)

Med med de funktioner til cifrene? Tlfnr og Postnr? :-)
Avatar billede Slettet bruger
21. januar 2006 - 14:47 #12
Nevermind tror jeg har fixet det... der manglede vist et "!" foran t'et... :-) Så må du gerne oprette svar
Avatar billede Slettet bruger
21. januar 2006 - 14:49 #13
Eller nej... den checker kun for om der står noget... den er ligeglad med hvor mange cifre der er indtastet.? :-(
Avatar billede roenving Novice
21. januar 2006 - 14:52 #14
Tjah, jeg kiggede ikke så grundigt på hvordan betingelsen var skrevet forud, men du kan nøjes med:

if(!t.postnr.value.match(/^\d{4}$/)){
Avatar billede Slettet bruger
21. januar 2006 - 14:55 #15
Tusind tak så virkede det... opret bare svar! ;-)
Avatar billede roenving Novice
21. januar 2006 - 14:58 #16
Velbekomme '-)
Avatar billede roenving Novice
21. januar 2006 - 15:02 #17
-- og tak for point ;~}
Avatar billede johan.o Nybegynder
21. januar 2006 - 15:14 #18
roenving--> med hensyn til dit email regexp. Er brugen af \w ikke et problem, indholdet er jo browser afhængigt, eller ?

Mvh. Johan
Avatar billede roenving Novice
21. januar 2006 - 15:23 #19
Jo, men forskellene ligger kun i de landespecifikke karakterer, som vel næppe bliver udbredt hverken i dag eller imorgen !-)

-- og egentlig test af en mail-adresse kan kun foretages ved at sende noget til den og få noget retur, så det kan kun blive en grov-test, så der vil jeg selv være fuldt tilfreds !-)
Avatar billede tjp Mester
21. januar 2006 - 15:26 #20
>>roenving
Fin forenkling af mit bud, men stil eller ej, så accepterer din /^.*?@\w[\w\.-]*?\.[a-z]{2,6}$/ altså uden videre "jkhgk@kjhgjh@noget.museum" - spørgsmålstegnet gør ingen forskel, da @ er inkluderet i '.'.
Det er for resten alt for sjældent, at man hører nogen sige, "min er faktisk kortere", uden at rødme! ;-)
Avatar billede roenving Novice
21. januar 2006 - 15:27 #21
Du har zq ret ,-(
Avatar billede johan.o Nybegynder
21. januar 2006 - 15:27 #22
Arh, ja selvfølgelig...de landespecifikke karakterer kan jo ikke (går jeg ud fra) optræde i domæne navnet :)..tsk tsk...jeg smutter igen :)

Mvh. Johan
Avatar billede Slettet bruger
21. januar 2006 - 15:53 #23
Har lige et spørgsmål til dig roenving... Hvis man nu nøjes med at vælge dag + måned og undlader at vælge år kan den stadig godkendes... Kunne man ik lave en lille smart if sætning i bunden som tjecker at alle bokse har en værdi.

// Alderstjek herunder.

    var d = t.dag.value;
    var m = t.maaned.value;
    var a = t.aar.value;
    var dato = new Date(a, m-1, d);
    var nu = new Date();
if(dato.getFullYear() != a || dato.getMonth()+1 != m || dato.getDate() != d){
    alert('Datoen er ikke en gyldig dato!');
    t.dag.focus();
    return false;
  }

if(nu.getFullYear()-18<a || (nu.getFullYear()-18==a && nu.getMonth()+1<m) || (nu.getFullYear()-18==a 

    && nu.getMonth()+1==m && nu.getDate()<d)){
    alert('Du skal være over 18 for at deltage i denne konkurrence!');
    t.dag.focus();
    return false;
  }

if (...........
......
Avatar billede roenving Novice
21. januar 2006 - 15:58 #24
Hvordan ser dine select-bokse ud ?-)

-- har de en tom foroven, for så kan du bare indsætte dette før det egentlige alderstjek:

if(t.dag.selectedIndex==0||t.maaned.selectedIndex==0||t.aar.selectedIndex==0){
    alert('Du skal angive din fødselsdag for at deltage i denne konkurrence!');
    t.dag.focus();
    return false;
}
Avatar billede Slettet bruger
21. januar 2006 - 16:11 #25
de 3 bokse har en start værdi... Dag, Måned, År...

Har prøvet med følgende men uden held.

if(t.dag.selectedIndex==Dag||t.maaned.selectedIndex==Måned||t.aar.selectedIndex==År){
    alert('Du skal angive din fødselsdag for at deltage i denne konkurrence!');
    t.dag.focus();
    return false;
  }
Avatar billede roenving Novice
21. januar 2006 - 16:15 #26
Javascript-variabler må ikke indeholde å'er ...

-- og sæt i stedet årstallet til 2006 eller sæt en tom øverst !-)
Avatar billede Slettet bruger
21. januar 2006 - 16:17 #27
Ok det prøver jeg. Tak for hjælpen 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