Avatar billede trophymanager Nybegynder
03. juli 2005 - 13:13 Der er 20 kommentarer og
1 løsning

Php kode til at validere form-emailfelt for korrekt syntaks

Hej Boys.

Er der nogen af jeg der har en stump phpkode der kan validere et formularfelts indhold for om det er korrekt syntaks hvis det skal være en email adresse?
Avatar billede trophymanager Nybegynder
03. juli 2005 - 13:32 #2
perfekto.. tak for det hurtige svar.
Avatar billede jakobdo Ekspert
03. juli 2005 - 13:32 #3
if (preg_match('/\\b[A-Z0-9._%-]+@[A-Z0-9._%-]+\\.[A-Z0-9._%-]{2,4}\\b/', $email))
{
echo "Den er ok";
}
Avatar billede nielle Nybegynder
03. juli 2005 - 13:34 #4
$suspectEmail = "Bill.Gates@MicroSoft.com";

$pattern = "\w+[\w\.]*@[\w\.]*\.[a-z]{2,3}";

if (preg_match("/" . $pattern . "/i", $suspectEmail))
    echo "Det ligner en emial adresse";
else
    echo "Det er ikke knogen email adresse."
Avatar billede Slettet bruger
03. juli 2005 - 13:36 #5
Den virker ikke korrekt.

Der er mange, der forsøger at lave email-valideringer, og de fleste gør det forkert, så de giver for mange negative - altså nægter at godkende adresser, som rent faktisk er gyldige. Min personlige kæphest er tegnet +, som er i mange af de adresser, jeg benytter, og som mange emailadressecheckere ikke godkender.
Avatar billede Slettet bruger
03. juli 2005 - 13:38 #6
Og min kommentar gælder både for linket og de løsninger, der er postet her.
Avatar billede erikjacobsen Ekspert
03. juli 2005 - 13:45 #7
Og det andet TLD-en, som i de her anførte eksempler må være på 2,3,4 tegn. Det er for lidt.
Avatar billede nielle Nybegynder
03. juli 2005 - 14:05 #8
$suspectEmail = "Bill.Gates@MicroSoft.com";

$legalChar = "[\w\+-]";
$legalCharSeq = $legalChar($legalChar+|\.$legalChar+)*;

$pattern = "$legalCharSeq@$legalCharSeq\.{a-z}{2,}";

if (preg_match("/" . $pattern . "/i", $suspectEmail))
    echo "Det ligner en email adresse.";
else
    echo "Det er ikke nogen email adresse.";
Avatar billede nielle Nybegynder
03. juli 2005 - 14:07 #9
Ups, skulle have været:

$pattern = "$legalCharSeq@$legalCharSeq\.[a-z]{2,}";
Avatar billede nielle Nybegynder
03. juli 2005 - 14:11 #10
... så kan sandbox fylde alle de lovlige tegn i $legalChar og erikjacobsen kan få lov til at specificere en øvre grænse på TLD'et.

Det ville jo være fristende at skrive:

$pattern = "$legalCharSeq@$legalCharSeq\.([a-z]{2}|biz|info|name|pro|aero|coop|museum)";

- men dette ville ikke tage højde for fremtidige TLD'er som f.eks. ”xxx”.
Avatar billede Slettet bruger
03. juli 2005 - 14:12 #11
Skulle den linie:

$legalCharSeq = $legalChar($legalChar+|\.$legalChar+)*;

ikke have set sådan ud:

$legalCharSeq = $legalChar . '(' . $legalChar . '+|\.' . $legalChar . '+)*';

Men det er stadig ikke nok. Bare fordi dit miljø måske ikke har et tegn, som en del af \w (For engelsk er \w = [a-zA-Z0-9_] ) så kan det godt lade sig gøre at have brugernavne, som indeholder det tegn.
Avatar billede Slettet bruger
03. juli 2005 - 14:15 #12
Nej, og så glemte du nogle af de mest benyttede TLD: com, net, edu, gov  og mil

Min pointe er: lad være med at tjekke syntaks. Se om der er et @ med noget før og noget efter, og send en mail med en valideringskode. Eventuelt brug DNS først for at se om domænet er gyldigt.
Avatar billede erikjacobsen Ekspert
03. juli 2005 - 14:17 #13
For ikke at gøre noget forkert kan man reducere problemet til:

  et @-tegn
  til venstre 1->flere ikke-@-tegn
  til højre 4->flere ikke-@-tegn, heraf mindst et punktum

Man kan jo alligevel ikke afgøre om en emailadresse du'r bare ved at kigge på den.
Skal den eksistere, så tjekker man det ved at sende en mail til den.
Et tjek som anført her skal blot fange oplagte tastefejl.
Avatar billede nielle Nybegynder
03. juli 2005 - 17:56 #14
sandbox>

1) \w er ikke miljøbestemt. Den står for den samme sekvens overalt i verdenen. Iøvrigt skrev jeg faktisk at du jo kunne tilføje de tegn som du mente manglede.

Jo, der var en smutter, men den skulle faktisk have set sådan her ud:

$legalCharSeq = "$legalChar($legalChar+|\.$legalChar+)*";
Avatar billede nielle Nybegynder
03. juli 2005 - 17:58 #15
sandbox> Jo, jeg glemte com, gov, net og org. Men rent faktisk var mit argument at man burde undgå denne version at tjekket fordi at det pt. kommer nye TLD'er til.
Avatar billede Slettet bruger
03. juli 2005 - 18:15 #16
Fra PHP-manualen: http://dk.php.net/manual/da/reference.pcre.pattern.syntax.php

\w any "word" character

A "word" character is any letter or digit or the underscore character, that is, any character which can be part of a Perl "word". The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale-specific matching is taking place (see "Locale support" above). For example, in the "fr" (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \w.

Så hvis LC_ALL er sat til da_DK, så vil æøåÆØÅ være med i \w. (Måske også nogle af éÉöÖäÄüÜ)
Avatar billede nielle Nybegynder
03. juli 2005 - 20:52 #17
Ja, man lærer da heldigvis noget nyt hver dag. Undskylder ydmygest sandbox.

Hvad hulen tænker PHP folkene dog på? Det er sgu da sindsygt at \w skulle ændre betydning med landet. Det kan da give anledning til alle mulige bizarre fejl når scripts kopieres rundt mellem brugere på 'nettet.

Det betyder imidlertid at man faktisk ikke må bruge \w, men i stedet skal bruge ”a-zA-Z0-9_”. Til trods for at æ, ø og å er tilladt i domænenavne, er de nemlig ikke tilladt (end´nu da) i email adresser.
Avatar billede erikjacobsen Ekspert
03. juli 2005 - 21:13 #18
"nemlig ikke tilladt (end´nu da) i email adresser." - jo da. Jeg har lige sendt
mig selv en email på adresser  "blær@erik.....ogsånogetmere". De er formelt også
tilladt i domænenavne der bruges til email, men ikke alle klienter forstår det endnu.
Avatar billede nielle Nybegynder
03. juli 2005 - 21:18 #19
Og det er skam heller ikke alle SMTP-servere som forstår dem endnu.
Avatar billede Slettet bruger
03. juli 2005 - 21:24 #20
Og derudover kan man bruge " om det til venstre for @, og så må det indeholde ALT (undtagen ")

Så hvis jeg havde sat min server til at modtage post for denne adresse, ville den være ganske gyldig:

"Bøh! Ble' du bange?"@minserver
Avatar billede nielle Nybegynder
03. juli 2005 - 21:57 #21
Der et *intet* ved programmering som skræmmer mig - altså andet end lige udviklerne, altså. ;^)
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