Avatar billede alex15 Nybegynder
22. april 2008 - 09:04 Der er 13 kommentarer og
2 løsninger

Validering preg_match, chek email

Hej Eksperter

Er igang med at lave noget validering på min hjemmeside.

Herunder har jeg lavet en <form> hvor brugerne skal indtaste deres email, og nu vil jeg gerne chekke om denne email er "ægte", forstår på den måde om det ligner en email aller: navn@domæne.dk.

Brugte det meste af dagen igår på at løse dette problem, uden held. så derfor ville jeg høre om nogle havde et forslag til hvordan jeg kunne løse problemet?

Har selv siddet og lavet følgende kode:

if (!preg_match_all("/([\w-æøåÆØÅ]+)@([\w-æøåÆØÅ]+)\.([a-zA-Z]+)/", stripslashes(stripslashes($str)), $matches) > 0) {
echo "IKKE godkendt";
} else {
echo "godkendt!!! :D";
}

---

altså ser selve (preg_match_all) således ud:

"/([\w-æøåÆØÅ]+)@([\w-æøåÆØÅ]+)\.([a-zA-Z]+)/"

- Problemet med denne er blot at følgende adresse virker og følgende gør ikke?

abc123-_@abc123-_.dk - Virker
abc123-_@abc123-_/.dk - Virker ikke (hvilket den heller ikke burde gøre.)

abc123-_@abc123-_./dk - Virker??? (Hvilket den IKKE burde gøre)
abc123-/_@abc123-_.dk - Virker??? (Hvilket den IKKE burde gøre)
Avatar billede coderdk Praktikant
22. april 2008 - 09:41 #1
prøv "/\b([\w-æøåÆØÅ]+)@([\w-æøåÆØÅ]+)\.([a-zA-Z]+)\b/"
Avatar billede nielle Nybegynder
22. april 2008 - 09:42 #2
Ret til:

"/^([\w-æøåÆØÅ]+)@([\w-æøåÆØÅ]+)\.([a-zA-Z]+)$/i"
Avatar billede nielle Nybegynder
22. april 2008 - 09:46 #3
Eller denne løsning:

$eMailPattern = "^[^@]+@(?:[\w-]+\.)+[a-z]{2,}$";
if (! preg_match("/$eMailPattern/i", $eMail)) {
    echo "IKKE godkendt";
} else {
    echo "godkendt!!! :D";
}
Avatar billede coderdk Praktikant
22. april 2008 - 09:47 #4
Ah, ja, nielle kan læse - Jeg antog at du ville finde flere emails i en længere tekst :)
Avatar billede alex15 Nybegynder
22. april 2008 - 11:14 #5
Okay, det ser ud som om at det virker præcis som jeg vil have det til at virke. Dejligt.

Derudover skulle jeg til at spørge om man ikke skulle tilsætte _ til [\w-æøåÆØÅ] - Men det ser ud som om at - også virker som _ ? - kan dette passe? Kan ikke lige se nogen forklaring om det i de artikler jeg har læst.

Samt hvad gør /i? i slutningen af koden? hvilken funktion har den?

Men du skal have tak for hjælpen. Smid lige et svar.
Avatar billede alex15 Nybegynder
22. april 2008 - 11:17 #6
Der ud over tilføjede jeg også lige '\.' til den første [] - så den også godkender '.' i en mail.
Avatar billede nielle Nybegynder
22. april 2008 - 12:01 #7
Det er \w der også matcher '_'-tegnet. Den matcer helt generelt 0-9, a-z, '_', og eventuelle specielle nationale bogstaver: 'á', 'ñ' osv. - dog afhængigt af hvilket land den opfatter sig selv som tilhørende.

Faktisk er der en fejl i dit møsneter: '-'-tegnet skal ikke stå på den plads. Ret til:

[\wæøåÆØÅ-]

Grunden er at '-' bruges til range: "a-z" betyder tegnene a til z.

Det lille 'i' står for ignore case. Den gør at dit tjek ikke skelner mellem stor og små bogstaver.
Avatar billede coderdk Praktikant
22. april 2008 - 12:23 #8
+ mangler også - faktisk er der meget få restriktioner i username-delen af en email:

disse er tilladte: a-z 0-9 ! # $ % * / ? | ^ { } ` ~ & ' + - = _
. er tilladt hvis den ikke er først eller sidst
Avatar billede coderdk Praktikant
22. april 2008 - 12:24 #9
Avatar billede alex15 Nybegynder
22. april 2008 - 12:42 #10
Hva mener du med at + mangler? der er da ikke nogle som bruger mail navn+efter@domæne.dk f.eks?

Min mail skal fungere efterfølgende mail:

Mit_navn-samt.efternavn@mit-domæne_ligenu.dk :D

Er der nogle tegn med jeg mangler?

Ellers virker det præcis som det skal lige nu.
Avatar billede coderdk Praktikant
22. april 2008 - 12:56 #11
alex15, Jeg bruger personligt altid + når jeg tilmelder mig fora, nyhedsbreve osv. Hvis et site ikke tillader + i email, melder jeg mig ikke til ;)

Gmail og Google for your domain har en funktionalitet, så brugernavn+noget@gmail.com altid kommer til brugernavn@gmail.com, men du kan så sortere på "noget" hvis du vil - Det kan bruges til mange ting ;)
Avatar billede alex15 Nybegynder
22. april 2008 - 13:04 #12
Okay, viste jeg slet ikke. Men det var da faktisk ret smart må man sige.

Men det har jeg så også rettet nu, så + foran @ også bliver godkendt. :)

smed bare \+ lige efter \. - Og det ser ud som om at det virker korrekt..

laver du ikke også lige et svar coderdk? - så deler jeg lige point 35/25 - hvis okay?
Avatar billede coderdk Praktikant
22. april 2008 - 13:32 #13
Fint :)
Avatar billede alex15 Nybegynder
22. april 2008 - 13:41 #14
Sådan.

Men i skal have mange tak for hjælpen. :) forsat god dag.

Alex
Avatar billede nielle Nybegynder
22. april 2008 - 13:43 #15
Jeg vil stadig anbefale dette mønster:

$eMailPattern = "^[^@]+@(?:[\w-]+\.)+[a-z]{2,}$";

- men ellers tak for point :^)
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