Funkcija za provjeru email adrese

27.06.2009 by: Omega

web-form_protectedEvo jedne veoma korisne funkcije kada radite sa email adresama koje unose Vaši korisnici pa stoga nikad nijesmo sigurni na sta ćemo naići u email polju. Inače sve ama bas SVE sto se unosi preko web formi pogotovo u janom dijelu sajta morate provjeriti. Javascript skripte za provjeru su korisne (sa stanovišta – user friendly interfejsa) ali ni izbliza dovoljne jer se lako zaobilaze od strane zlonamjernih korisnika. Sve bitne, ma uostalom sve podatke morate provjeriti i na serverskoj strani.

Funkcija ispod provjerava validnost email adrese i od ostalih koje “kruže” okolo razlikuje se po korišćenju DNS lookups za MX i A zapise (ovo mislim da radi samo na Linux/Unix serverima pa ako je vaš hosting na windows serverima ili ovaj skript testirate lokalno na vašoj windows mašini zakomentirajte ove linije koda) i po tome što neke skripre koje koriste sledeće regularne izraze:

“^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)
↪*(\.[a-z]{2,3})$”
Ovaj regularni izraz dozvoljava samo donju liniju (_) srednju liniju (-) mala slova i brojeve a ne dozvoljava sasvim regularne znakove kao sto su kosa crta(/), znak jednakosti (=), uzvičnik (!) i procenat (%). Ovaj izraz takođe zahtjeva da domen najvišeg nivoa (.com, .me, .net) ima dva ili tri slova izostavljajući email adrese koje završavaju sa .info, .travel itd.

“^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$”
Ovaj regularni izraz ima iste greske kao i prethodni kada su u pitanju specijalni karakteri. Dozvoljava top level domene sa vise od dva ili tri slova ali zato neke kao sto su example..com smatra ispravnim a oni to nijesu.

Fajl validEmail.php

<?php
/**
Validate an email address.
Provide email address (raw input)
Returns true if the email address has the email
address format and the domain exists.
*/
function validEmail($email)
{
$isValid = true;
$atIndex = strrpos($email, &quot;@&quot;);
if (is_bool($atIndex) &amp;&amp; !$atIndex)
{
$isValid = false;
}
else
{
$domain = substr($email, $atIndex+1);
$local = substr($email, 0, $atIndex);
$localLen = strlen($local);
$domainLen = strlen($domain);
if ($localLen < 1 || $localLen > 64)
{
// local part length exceeded
$isValid = false;
}
else if ($domainLen < 1 || $domainLen > 255)
{
// domain part length exceeded
$isValid = false;
}
else if ($local[0] == '.' || $local[$localLen-1] == '.')
{
// local part starts or ends with '.'
$isValid = false;
}
else if (preg_match('/\\.\\./', $local))
{
// local part has two consecutive dots
$isValid = false;
}
else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))
{
// character not valid in domain part
$isValid = false;
}
else if (preg_match('/\\.\\./', $domain))
{
// domain part has two consecutive dots
$isValid = false;
}
else if
(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&amp;`_=\\/$\'*+?^{}|~.-])+$/',
str_replace(&quot;\\\\&quot;,&quot;&quot;,$local)))
{
// character not valid in local part unless
// local part is quoted
if (!preg_match('/^&quot;(\\\\&quot;|[^&quot;])+&quot;$/',
str_replace(&quot;\\\\&quot;,&quot;&quot;,$local)))
{
$isValid = false;
}
}
if ($isValid &amp;&amp; !(checkdnsrr($domain,&quot;MX&quot;) ||
↪checkdnsrr($domain,&quot;A&quot;)))
{
// domain not found in DNS
$isValid = false;
}
}
return $isValid;
}
?>

Primjena


<?php
require('validEmail.php');

if(validEmail($email)) {

// adresa je u redu i moze se koristiti

}

else {

//adresa nije u redu i shodno tome kod koji obavjestava korisnika ili sta vec treba

}

Add to Del.cio.us RSS Feed Add to Technorati Favorites Stumble It! Digg It!
    www.sajithmr.com

Filed under: PHP,Uputstva

Trackbacks

Leave a Reply