Avatar billede dennism Nybegynder
25. januar 2007 - 09:48 Der er 15 kommentarer og
2 løsninger

PHP: gyldig email?

Jeg har denne ereg som jeg lavede for 2 år siden, til at teste om en string indeholder en gyldig email-adresse:

ereg("([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+.[a-zA-Z0-9._-]+)", $email)

Er denne stadig korrekt?
Avatar billede windcape Praktikant
25. januar 2007 - 09:50 #1
Inden for de kriterier den tillader ja :-) Der er vel ikke så meget at spørge om.

Jeg synes dog stadig at "|(.*)@(.*).(.*)|" (preg) bør være nok, da der sjælden er en grund til at checke andet. Hvis du skal sende vigtige emails ud, indtaster brugeren jo nok ikke en falsk email.
Avatar billede dennism Nybegynder
25. januar 2007 - 10:23 #2
Hvordan foreslår du altså at jeg skal bruge preg istedet?
Avatar billede windcape Praktikant
25. januar 2007 - 10:24 #3
som jeg lige skrev det :p
Avatar billede dennism Nybegynder
25. januar 2007 - 10:35 #4
preg("|(.*)@(.*).(.*)|",$email) ?
Avatar billede coderdk Praktikant
25. januar 2007 - 10:37 #5
Prøv:

    function isValidEmail($address) 
    { 
        $address = trim($address);
        list(,$host) = split('@',$address);
        if (!preg_match('/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`{|}~]+' . // username
            '@' .                                  // 'at'
            '([-0-9A-Z]+\.)+' .                    // domain name(s)
            '([0-9A-Z]){1,6}\.?$/i',                // tld
            $address)) 
        {
            // Return true if it's an IP
            return preg_match( "/^\[(\d{1,3}\.){3}\d{1,3}\]$/", $host );
        }
        $host .= '.'; // DNS style address
        return (getmxrr($host,$mxrecords) || checkdnsrr($host,'ANY'));
    }
Avatar billede windcape Praktikant
25. januar 2007 - 10:39 #6
coderdk

list(,$host) = split('@',$address);

burde nok være

list(,$host) = explode('@',$address);

da split bruger regulare expression splitting, som er langsommere :-)
Avatar billede dennism Nybegynder
25. januar 2007 - 10:40 #7
coderdk >>

Så meget sikkerhed har jeg ikke brug for - men ellers tak.
Avatar billede dennism Nybegynder
25. januar 2007 - 10:44 #8
windcape >>

Du foreslår altså:
preg("|(.*)@(.*).(.*)|",$email)

?
Avatar billede windcape Praktikant
25. januar 2007 - 10:46 #9
preg er ikke engang en funktion. Jeg foreslår du læser manualen istedet for at gætte dig til syntax.

preg står for perl styled regulare expressions, hvilket var sådan en jeg skrev. Du kan se hvordan man bruger dem i coderdks script.
Avatar billede dennism Nybegynder
25. januar 2007 - 10:49 #10
Tak for dit svar. Jeg er altså nødt til at bruge preg_match istedet?

preg_match("|(.*)@(.*).(.*)|",$email)
Avatar billede coderdk Praktikant
25. januar 2007 - 10:50 #11
preg_match er bedre, men brug + i stedet for *
Avatar billede coderdk Praktikant
25. januar 2007 - 10:51 #12
* = 0 eller flere
+ = 1 eller flere
Avatar billede coderdk Praktikant
25. januar 2007 - 10:52 #13
Men hvorfor ikke bruge min?

preg_match('/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`{|}~]+@([-0-9A-Z]+\.)+([0-9A-Z]){1,6}\.?$/i',              $email)
Avatar billede windcape Praktikant
25. januar 2007 - 10:55 #14
fordi den tager længere tid at skrive! :~p
Avatar billede dennism Nybegynder
25. januar 2007 - 11:00 #15
Dvs. at jeg bør bruge denne:
preg_match("|(.+)@(.+).(.+)|",$email)
Avatar billede dennism Nybegynder
25. januar 2007 - 18:18 #16
Smider du et svar, windcape?
Avatar billede windcape Praktikant
26. januar 2007 - 10:58 #17
ok :)

Men del med coderdk :p
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