Avatar billede nwn Nybegynder
25. januar 2009 - 16:04 Der er 15 kommentarer og
2 løsninger

Email validering i PHP

Hej.

Er der ind der kan komme med et eksempel på, hvordan man laver en email validering via preg_match()?

Nu ved jeg ikke hvilke tegn der er tilladte i emails, men jeg går udfra, at det er bogstaverne A-Z, tallene 0-9, -, _ og . (Ret mig endelig, hvis der er flere eller færre)

Hvordan kan man så lave en validering, hvor email adressen først og fremmest skal indeholde minimum 1 af de tilladte tegn, efterfulgt af et @. Derefter minimum 1 af de tilladte tegn, efterfulgt af et punktum. Til sidst, efter punktummet, skal der være mellem 2 og 5 tegn, og blandt disse tegn, må der kun være bogstaver samt 1 enkelt punktum.

Ja, en email validering der går helt i dybden. Jeg håber nogle kan hjælpe med, og give en forklaring på hvordan det hænger sammen.
Avatar billede Rosenkjaer Novice
25. januar 2009 - 16:11 #1
Vil gerne lige kigge på det, så vidt jeg husker er + også et gyldigt tegn.

Ud over det så er top-level domænet .museum også i brug, og længere end de 5 tegn efter punktumet.

M.v.h. Johnny
Avatar billede nwn Nybegynder
25. januar 2009 - 16:18 #2
Hej.

Det lyder godt, du er interesserede i at kigge på det. Ang. top-level domænet, så må det vel bare være mellem 2 og 6 tegn i stedet ;)
Avatar billede nwn Nybegynder
25. januar 2009 - 16:22 #3
Jeg har lige tjekket, og fundet ud af, at du har ret. Tegnet + er også tilladt.
Avatar billede Rosenkjaer Novice
25. januar 2009 - 16:25 #4
Hej, nu er jeg nød til at løbe, skal på arbejde..

Prøv denne:

<?php
    $string = "dit-navn@din-side.museum";
    if (preg_match('/^[^0-9][a-zA-Z0-9_\-+]+([.][a-zA-Z0-9_\-+]+)*[@][a-zA-Z0-9_\-]+([.][a-zA-Z0-9]+)*[.][a-zA-Z]{2,6}$/', $string)) {
        echo "Rigtig mail-adresse";
    }
?>

Den burde tage højde for mere eller mindre alt..

Kilde: http://www.remote.org/jochen/mail/info/chars.html
Avatar billede nwn Nybegynder
25. januar 2009 - 16:33 #5
Det lyder bare super. Jeg prøver den =)
Avatar billede nwn Nybegynder
25. januar 2009 - 17:03 #6
Jeg har lige gennemtestet det, og fundet et par småfejl:

- Hvis det der kommer før @ er på 1 tegn, giver det fejl
- Hvis det allerførste tegn er et tal giver det fejl
- Hvis det allerførste tegn er et ikke-tilladt tegn, giver det OK (F.eks ")
- Hvis det der kommer før @ kun består af punktummer, giver det fejl

Det ville super, hvis de kunne blive rettet ;)

Det haster heldigvis ikke, så kan sagtens vente til du får tid.
Avatar billede tmi Nybegynder
25. januar 2009 - 18:26 #7
jeg plejer at gøre sådan her:
if (preg_match("#^[^@\s]+@[^\s]+\.[a-z]+$#", $email)) echo "match!";

Den siger bare minimum et tegn før @ og minimum et efter og så et . og så et toplevel domæne. Du skal huske på at man nu har domæner med ÆØÅ og sådan noget, så det er efterhånden utrolig svært at vide om en email er korrekt, men med den her får du ihvertfald sorteret de mest dovne fra. Folk ved jo som regel også at hvis de indtaster fx "sjadjslkhfkds" og får en fejl, at de så bliver nød til at indtaste en rigtig email, og gider derfor ikke prøve at se om de kan indtaste noget der ikke er en email. Hvis de ikke gider give deres email skriver de nok alligevel bare test@test.dk.
Avatar billede tmi Nybegynder
25. januar 2009 - 18:32 #8
Hvis du virkelig vil tvinge folk til at skrive en email, der overholder specifikationen for en email adresser, så kan du læse den her i punkt 3.4 Address Specification: http://www.faqs.org/rfcs/rfc2822.html
Avatar billede nwn Nybegynder
25. januar 2009 - 20:04 #9
Hej tmi.

Det er rigtigt ja, at en person altid ville kunne skrive f.eks test@test.dk, hvis vedkommende ikke gider skrive sin egen. Men det vil ikke rigtig nytte noget, da der sendes en nødvendig mail til den angivne email adresse.

Email valideringen er blot for at personen ikke ved en fejl indtaster forkert, og samtidig for at holde dem væk, der for sjov lige skriver en ugyldig mail.

Men jeg er skam helt tilfreds med det xylene_free har lavet for mig. Jeg venter blot lige på, at jeg de fejl jeg har nævnt, bliver rettet :)
Avatar billede tmi Nybegynder
25. januar 2009 - 20:17 #10
Her er en rettet udgave af den.

<?php
    $string = "dit-navn@din-side.museum";
    if (preg_match('/^[a-zA-Z0-9_\-+]+(\.[a-zA-Z0-9_\-+]+)*@[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9]+)*\.[a-zA-Z]{2,6}$/', $string)) {
        echo "Rigtig mail-adresse";
    }
?>
Avatar billede nwn Nybegynder
26. januar 2009 - 15:14 #11
Ser godt ud. Dog er der stadig en fejl:

Hvis der står et punktum i starten eller slutningen af teksten, der er før @ så giver det fejl.

Og nogle ekstra fejl jeg fandt, som måske kan rettes:

Hvis - står først eller til sidst, i teksten der er efter @ og før .endelse, så giver det rigtigt. (Et domæne navn kan jo ikke hedde f.eks www.-hej.dk)

Hvis _ står først eller til sidst, i teksten der er efter @ og før .endelse, så giver det rigtigt. (Et domæne navn kan jo ikke hedde f.eks www._hej.dk)

Ja jeg er en smule krævende, men dette er forhåbenligt også det sidste jeg forlanger ;)

Jeg håber det er noget i du/i kan fikse.
Avatar billede tmi Nybegynder
26. januar 2009 - 15:26 #12
<?php
    $string = "dit-navn@din-side.museum";
    if (preg_match('/^[a-z0-9_\-+\.]+@[a-z0-9]+([\._\-][a-z0-9]+)*\.[a-z]{2,6}$/i', $string)) {
        echo "Rigtig mail-adresse";
    }
?>
Avatar billede tmi Nybegynder
26. januar 2009 - 15:28 #13
Og hvis du synes man kun må have 1 punktum i træk, men flere _ eller - i træk efter @, så:
if (preg_match('/^[a-z0-9_\-+\.]+@[a-z0-9]+((\.|[_\-]+)[a-z0-9]+)*\.[a-z]{2,6}$/i', $string))
Avatar billede roenving Novice
26. januar 2009 - 17:17 #14
Lige en detalje:

Den gældende standard for smtp og altså email-adresser (rfc 2821 -- google !-) stipulerer at _ingen_ udover mailhosten må validere endsige afvise nogetsomhelst, der står foran @-tegnet, så der skal man bruge * som kvantifikator istedet for + !o]
Avatar billede nwn Nybegynder
26. januar 2009 - 18:10 #15
Jamen så endte den med at se således ud:

if (preg_match('/^[a-z0-9_\-+\.]*@[a-z0-9]+((\.|[_\-]+)[a-z0-9]+)*\.[a-z]{2,6}$/i', $string))

Jeg takker rigtig mange gange for jeres hjælp. Jeg synes xylene_free og tmi har fortjent pointene, så hvis i vil være så venlige, at lægge et svar =) ?
Avatar billede tmi Nybegynder
26. januar 2009 - 18:33 #16
Bøh =)
Avatar billede Rosenkjaer Novice
03. februar 2009 - 22:06 #17
Hej
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
Kurser inden for grundlæggende programmering

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