Gå til innhold

Email validering


Anbefalte innlegg

Videoannonse
Annonse

Hvis du vil lage et på egenhånd finner du informasjon om hvordan en gyldig e-postadresse skal se ut i RFC-822. Men jeg må advare med en gang om at det er MYE informasjon ;)

 

Vil du derimot ha noe som er ferdiglaget kan du søke i google etter php email validation, og du finnes en hel del. Første treff hos meg var en algoritme som så brukbar ut...

Lenke til kommentar


001    function CheckEmail($adr){

002     // Parameter:

003     // $adr -> Email Adress

004     // Rückgabewerte:

005     // TRUE -> everything fine

006     // Else, returns array:

007     // Array(code, part)

008     // Code s.u.; part: Part which caused error

009     // -1 -> no @ in adr

010     // -2 -> More than 1 @ (alas theoretically correct...)

011     // -3 -> Error in Local-Part 

012     // -4 -> Error in Domainname

013     // -5 -> Domain not existent

014     // -6 -> No MX for Domain

015  

016     // Regexpe

017  

018     $re = array(

019       // - Local-Part

020       'lp' => '[a-z_d][-_.a-zd]{0,}',

021       // - Domain

022       'dom' => '(?:[a-zd]{1,}(?:[-a-zd]{0,}?){0,}?.){0,}[a-z]{2,3}.{0,1}'

023     );

024  

025     foreach ($re as $typ => $wert){

026  

027       $re[$typ] = '÷^' . $wert . '$÷i';

028     }

029  

030     if (('' == $adr) ||

031  

032         (FALSE === ($parts = split('@', $adr)))

033        ){

034       // Nothing to do

035       return array('code' => -1, 'part' => $adr);

036     }

037     if (2 > ($part_anzahl = count($parts))){

038       // Less than 1 @ (also 0)

039       return array('code' => -2, 'part' => $adr);

040     }

041     if (2 < $part_anzahl){

042       // Too many @'s!

043       return array('code' => -3, 'part' => $adr);

044     }

045     if (! preg_match($re['lp'], $parts[0])){

046       // Local-Part error!

047       return array('code' => -4, 'part' => $parts[0]);

048     }

049     if (! preg_match($re['dom'], $parts[1])){

050       // Domain looks bogus!

051       return array('code' => -5, 'part' => $parts[1]);

052     }

053     if (! checkdnsrr($parts[1], 'ANY')){

054       // Domain not existant

055       return array('code' => -6, 'part' => $parts[1]);

056     }

057     if (!checkdnsrr($parts[1], 'MX') && !checkdnsrr($parts[1], 'A')){

058       // No MX for domain

059       return array('code' => -7, 'part' => $parts[1]);

060     }

061  

062     // When we get here, everything is fine!

063  

064     return TRUE;

065   }

066  

 

 

http://

http://www.phpbuilder.com/mail/php-general...001091/1660.php

Lenke til kommentar

Jesus! Greit, det var *ikke* slik jeg hadde tenkt meg :D

 

Tror nok heller bare tar og mekker et lite et selv. Tenkte mer på bare å sjekke om det var en alfakrøll der, at det var et domene oppgitt osv. Veldig raskt og lite. Hurtigsjekk liksom bare :)

Lenke til kommentar

Dette kan gjøres med en relativt enkel regex. For eksempel:

 

if (!eregi("^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-_]+.)*([a-z0-9-]+)(.[a-z]{2,4}))$', $email", $email))

// Epostadressen er gyldig

else

// Epostadressen er ikke gyldig

 

Vet ikke hvor bra denne er, fant den bare på nettet, men den kan jo få deg til å tenke litt :) Orker ikke lage en skikkelig nå.

Lenke til kommentar

den funksjonen jeg pasta sjekker for @ og domene.

 

Men den regexp'n funker bra den også, & ser kanskje ikke så skummel ut ;) (har brukt den før i script og den tar det meste.)

 

(den funksjonen jeg pasta er vissnok litt raskere og bedre ifølge phpbuilder btw.)

Lenke til kommentar

Vær oppmerksom på at det er lov til å skrive mye mer i en epostadresse enn de fleste tror, slik at disse enkle regex-testene vanligvis vil forkaste endel varianter av gyldige adresser. Den Valgard sin postet vil forkaste selv enkle gyldige adresser. Jeg pleier f.eks. vanligvis å skrive navnetpå[email protected] når jeg registrerer meg et sted. Det vil ikke være lov med den regex-testen. Den virker dessuten ikke slik den er ment å virke, siden ikke . blir escapet utenfor [].

Lenke til kommentar

Som sagt har jeg ikke skrevet den over selv, jeg bare pastet fra et annet forum. Dersom man vil være ekstremt pirkete må man lese hele standarden, eventuelt kan man bare være litt "greie" og godkjenne alt som er av typen [email protected]. En regex av den typen kan se slik ut:

 

^[^@]+@[^.]+.[^@]+$

 

Jeg kan ikke helt se hvilke gyldige adresser den avviser, men det er mulig at det er feil i den... Skrik ut hvis jeg har skrevet noe feil :D

 

For øvrig er jo den beste løsningen å tvinge folk til å klikke på en link via eposten, men dette er selvsagt ikke alltid ønskelig.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...