Avatar billede sj.netomia Nybegynder
20. april 2007 - 01:06 Der er 10 kommentarer og
1 løsning

udvidelse af regexp script.

Hej Eksperter.

Jeg ville høre om det er muligt at lave en udvidelse til dette script som jeg har fundet her på exp.dk

error = 0;

  placering=0;
  tekst=(document.form.email.value).toLowerCase();
  placering=tekst.indexOf("@");
  if(tekst ==""){
    alert ("Der skal stå en e-post adresse i tekst feltet");
    return false;
  }
  else{
    tegn=tekst.indexOf(" ");
    if(tegn!=-1){
      alert ("Der må ikke være mellemrum i adressen");
      return false;
    }
    else{
      if (tekst.indexOf("æ")!=-1 || tekst.indexOf("ø")!=-1 || tekst.indexOf("å")!=-1 ||
        tekst.indexOf("Æ")!=-1 || tekst.indexOf("Ø")!=-1 || tekst.indexOf("Å")!=-1 ||
        tekst.indexOf(";")!=-1 || tekst.indexOf(",")!=-1){
        alert ("Der er ulovlige tegn i adressen. Må ikke indeholde: æ ø å Æ Ø Å , ;");
        return false;
      }
    else{
      if (placering<1 || tekst.length<=(placering+1)){
        alert ("e-post adressen er forkert - forsøg igen");
        return false;
      }
    }
  }
}

Jeg vil gerne have scriptet til at finde forkerte email adresser som f.eks .peter@hans.dk og peter.@hans.dk og peter@.hans.dk og
peter@hans.dk.

Kan det laves. ?

På forhånd tak for jeres hjælp.
Avatar billede roenving Novice
20. april 2007 - 01:20 #1
Sagtens, men faktisk er både .peter@hans.dk og peter.@hans.dk ganske lovlige, for det, der står foran @-tegnet må kun den mail-server, der styrer det pågældende domæne validere (selv @hans.dk eller "Karl Søren Tværsted"@hans.dk er faktisk i orden !-)

se http://rfc.net/rfc2821.html, punkt 2.3.10, sidste punktum:

"
Consequently, and due to a long history of problems when intermediate hosts have attempted to optimize transport by modifying them, the local-part MUST be interpreted and assigned semantics only by the host specified in the domain part of the address.
"

-- og hele scriptet kan faktisk indskrænkes til at være (hvis du ikke vil acceptere danske tegn i domænet, hvilket jo også er lovligt i dag !-)

f sættes som formen, mest simpelt er at hente den fra en onsubmit="return valider(this);" på formen ...

valider(f){

//...

if(!f.email.value.match(/^.*@\w[\w\.-]*\.[a-z]{2,6}$/i)){
  alert("Du skal angive en gyldig mail-adresse !-)");
  f.email.focus();
  return false;
}

//...

  return true;
}
Avatar billede roenving Novice
20. april 2007 - 01:21 #2
-- og det skal selvfølgelig være:

function valider(f){
Avatar billede roenving Novice
20. april 2007 - 01:31 #3
-- og til regexpen kan man mmåske oversætte en anelse:

/^.*@\w[\w\.-]*\.[a-z]{2,6}$/i

// bruges som afgrænsere, ligesom '' eller "" bruges til tekst

^$ betyder helt fra værdiens (tekstens) start og helt til slut

.* betyder et vilkårligt antal af hvilkesomhelst tegn

før @-tegnet, som skal efterfølges af eet ord-tegn: \w (i de fleste almindelige browsere a-z, 0-9 og _. I nogle browsere dækker det også tegn, der bruges i det aktuelle locale, i Danmark f.eks. æøå é û m.fl. !-)

Efter det skal der være et vilkårligt antal af de tegn, der er specificere i de firkantede paranteser, altså  ord-tegn, punktummer eller bindestreger: [\w\.-]*

Derefter skal der være et punktum: \.

-- og det hele skal afsluttes af en følge af 2-6 tegn, der skal være a-z: [a-z]{2,6}

i-et efter afslutningen betyder, at hele sammenligningen skal være caseInsensitive, dvs. at det skal godtages uanset om der er blevet brugt store eller små bogstaver !o]
Avatar billede roenving Novice
20. april 2007 - 01:42 #4
PS. Hvis du ønsker at validere mere, er der faktisk kun een eneste måde at gøre det på: Send en mail, der skal besvares ved at klikke på et eller andet link, som du kan genkende, f.eks. en UID eller lignende absolut identifier !-)
Avatar billede sj.netomia Nybegynder
20. april 2007 - 02:05 #5
Sagtens, men faktisk er både .peter@hans.dk og peter.@hans.dk ganske lovlige, for det, der står foran @-tegnet må kun den mail-server, der styrer det pågældende domæne validere (selv @hans.dk eller "Karl Søren Tværsted"@hans.dk er faktisk i orden !-)

Det vidste jeg ikke tak for info, men din validering virker fint lige bort set fra at man godt kan skrive peter@hans.dkz eks. kan det laves sådan at den kun godtager nuværende domæner. Eller er det for kompleks.

Bare sig til hvis det ikke kan laves og smid et svar så skal jeg nok give point alligevel for du har jo løst opgaven.
Avatar billede roenving Novice
20. april 2007 - 02:19 #6
Hvis du skal godkende alle top-level-domæner skal du have en liste, der er umanerlig lang (vist over 200 !-), så det kan godt laves, men så bliver det netop så komplekst og uoverskueligt, at risikoen for fejl langt overstiger gevinsten ...

Se f.eks. listerne på wikipedia: http://en.wikipedia.org/wiki/Top-level_domain !-)

-- els velbekomme '-)
Avatar billede sj.netomia Nybegynder
20. april 2007 - 02:19 #7
forresten så gik denne også igennem. burde den det ?
peter@h.ans.dk
Avatar billede sj.netomia Nybegynder
20. april 2007 - 02:21 #8
tak for hjælpen, håber bare at du kan hjælpe med det sidste spørgsmål jeg stilte. jeg dropper det med domæne check....
Avatar billede roenving Novice
20. april 2007 - 02:35 #9
Ja, der er faktisk ret mange steder, man har differentierede mail-adresser, men langt fra så mange som bruger multilevel host-names ...

-- nu ved jeg ikke lige om denne gælder, men man kunne forestille sig adresser på en flådebase på Hawaii have denne type adresser: capt.s.u.walker@command.hawaii.nav.mil !-)

-- og tak for point ;~}
Avatar billede roenving Novice
20. april 2007 - 14:33 #10
-- og så glemte jeg nogen af de mest indlysende, da en hel masse lande har second-level tlds, f.eks. co.uk !-)
Avatar billede sj.netomia Nybegynder
21. april 2007 - 15:03 #11
ja ok, men man kan jo også godt skrive peter@han,s.dk
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