Avatar billede advancedweb Nybegynder
19. november 2004 - 15:12 Der er 4 kommentarer

Validering af brugerinput

Jeg skal validere en email-adresse, som brugeren skriver i en form.
Jeg tjekker om der er en gyldig emailadresse i feltet med:
[code]
if(!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$",$_POST[email])) {
$error[email] = "notvalid";
}
[/code]

Men hvis man f.eks skriver / eller et andet tegn, og så bagefter skriver en gyldig email-adresse altså fx.: /navn@udbyder.dk
Så godkender den adressen fordi den indeholder en gyldig mail-adresse. Men hvis jeg nu skal være sikker på at det KUN er mailadressen der står i feltet, hvordan vil det så være smartest at tjekke det... med ereg(), eller?
Avatar billede erikjacobsen Ekspert
19. november 2004 - 15:22 #1
Den her

$email="/navn@udbyder.dk";
if(!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$",$email)) {
  print "Ulovlig";
} else {
  print "God nok";
}

skriver "ulovlig" som den skal, og uden "/"-eren skriver den "god nok". Det ser
da ud til at virke som det skal...?
Avatar billede advancedweb Nybegynder
19. november 2004 - 15:26 #2
Undskyld, men hvad er forskellen :D ... jeg kan ikke rigtig se nogen forandring
Avatar billede advancedweb Nybegynder
19. november 2004 - 15:28 #3
arhhh.... har fundet ud af det :D
Avatar billede coderdk Praktikant
19. november 2004 - 16:39 #4
Hvis du bruger linux, kan du bruge denne:

    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)) 
        {
            if (preg_match('/^\[(.*)\]$/',$host,$regs))
            {
                $ip = explode('.',$regs[1]);
                $is_ip = 1;
                foreach ($ip as $byte)
                {
                    if (!is_numeric($byte))
                    {
                        $is_ip = 0;
                        break;
                    }
                }
                if ($is_ip)
                {
                    return true;
                }
            }
            return false;
        }
        $host .= '.'; // DNS style address
        return (getmxrr($host,$mxrecords) || checkdnsrr($host,'ANY'));
    } 

Så bliver det næsten ikke mere "sikkert" om adressen findes ;)
Bruger du windows, skal du fjerne getmxrr og checkdnsrr (de virker vistnok ikke).
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