Avatar billede jjdk Nybegynder
21. juli 2006 - 22:18 Der er 14 kommentarer og
1 løsning

Funktion til kontrol af korrekt indtastet emailadresse

Hej.
Nogen der kan hjælpe med en funktion, der kan kontrollere om en email-adresse har korrekt syntax. Findes der en mulighed i stil med "Checkdate()", som tjekker om datoen findes.
Avatar billede michael_stim Ekspert
21. juli 2006 - 22:27 #1
Findes ikke i PHP ;o)

Brug javascript, så er du fri for at loade siden för den checker.

Stjålet her fra eksperten:

  var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
  var regexp = new RegExp("@["+t+"]["+t+"\\.\\-]*\\.[a-z]{2,6}","i");
  tekst=f.mail.value.toLowerCase();
  if (!regexp.test(tekst)||tekst.match(/\.\.|@\.|-@|--/)){
      alert ("Der skal stå en gyldig e-mail adresse i tekst feltet");
      f.mail.focus();
      return false;
  }
Avatar billede jjdk Nybegynder
21. juli 2006 - 22:47 #2
Tak for rådet, men jeg er ikke god til javascript.
I min form har jeg følgende kode:

<td>Emailadresse:</td>
<td><input type='text' name='email' value='{$_SESSION['array'][14]}' class=form size=40></td>

Hvor skal jeg skrive koden - Sorry jeg er ikke god til det her.
Avatar billede Bjarne Novice
22. juli 2006 - 01:37 #3
function check_email($email) {
if((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) {
$host = explode('@', $email);
if(checkdnsrr($host[1].'.', 'MX') ) return TRUE;
if(checkdnsrr($host[1].'.', 'A') ) return TRUE;
if(checkdnsrr($host[1].'.', 'CNAME') ) return TRUE;
}
return FALSE;

}
Avatar billede jjdk Nybegynder
22. juli 2006 - 09:28 #4
Tak for svaret, men...
1. Jeg går ud fra, at koden skal stå øverst i mit form-afsnit.
2. Lige inden koden, har jeg skrevet: <script type="text/javascript">
3. Skal der ikke være en fejlmeddelelse?
4. Jeg har prøvet, men siden er helt blank - altså ingen form m.m.
Avatar billede jjdk Nybegynder
22. juli 2006 - 09:36 #5
Jeg har også lige prøvet med koden øverst i hele - altså::
1. Javascript
2. Form
Avatar billede jjdk Nybegynder
22. juli 2006 - 09:46 #6
OK - jeg glemte at afslutte med </script>
Nu vises formen godt nok, men der sker ingenting, når jeg fx. skriver en emailadresse uden @
Nogen forslag....
Avatar billede Bjarne Novice
22. juli 2006 - 18:22 #7
Hvis du validerer med JavaScript kan du ikke regne med, at alle de indtastede mail-adresser er gyldige - JavaScript er klientside og nogle slår det fra i browseren.

Den funktion jeg har skrevet for oven er PHP. Funktionen returnerer TRUE, hvis mail-adressen er gyldig. Ex.:

if($_POST['email'] == TRUE) //gør noget
else //tilbage til formfelt
Avatar billede jjdk Nybegynder
22. juli 2006 - 18:40 #8
OK - jeg troede det var Javascript.
Jeg prøver lidt igen i løbet af aftenen.
Avatar billede Bjarne Novice
22. juli 2006 - 20:00 #9
Ok... der er fejl i det eksempel jeg gav..

if(check_email($_POST['email']) == TRUE) //gør noget
else //tilbage til formfelt

..skulle det selvfølgelig være :)

Du skal blot sørge for, at funktionen er tilgængelig for scriptet. Enten ved at skrive funktionen i samme fil eller bruge include.
Avatar billede jjdk Nybegynder
23. juli 2006 - 15:54 #10
Så virker det.
Jeg forstår ikke koden. Kan du kort skrive, hvad det er, som tjekkes i email-adressen.
Og er det nemt at tilføje, at den sætter "TRUE", hvis der slet ikke udfyldt en email-adresse. Til dette har jeg nemlig en kontrol i forvejen. Det er nemlig OK i nogle tilfælde, at der ikke udfyldes email.
Ellers send et svar. Tusind tak indtil  nu.
Avatar billede jjdk Nybegynder
24. juli 2006 - 09:26 #11
Det jeg ikke forstår er de 3 linjer med $host, der returnerer TRUE.
Avatar billede Bjarne Novice
29. juli 2006 - 16:33 #12
Tjekker om stengen har syntaks som en email-adresse. Det sidste kan du læse om her: http://no.php.net/manual/da/function.checkdnsrr.php

Ja, det er nemt at få funktionen til at returnere TRUE, hvis stregen er tom:

function check_email($email) {
if(empty($email)) return TRUE;
if((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) {
$host = explode('@', $email);
if(checkdnsrr($host[1].'.', 'MX') ) return TRUE;
if(checkdnsrr($host[1].'.', 'A') ) return TRUE;
if(checkdnsrr($host[1].'.', 'CNAME') ) return TRUE;
}
return FALSE;
}
Avatar billede jjdk Nybegynder
29. juli 2006 - 17:44 #13
Det er super - tusind tak for hjælpen.
Sender du et svar.
Avatar billede Bjarne Novice
29. juli 2006 - 19:54 #14
Sehr gut
Avatar billede jjdk Nybegynder
12. august 2006 - 17:07 #15
Har lige opdaget at funktionen ikke "fanger", hvis der er skrevet en email-adresse, hvor der er anvendt mellemrum: eksempelvis "dora hansen@mail.dk"
Er det muligt at fange denne fejl.
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