Funkcija za provjeru email adrese
27.06.2009 by: Omega
Evo 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, "@");
if (is_bool($atIndex) && !$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!#%&`_=\\/$\'*+?^{}|~.-])+$/',
str_replace("\\\\","",$local)))
{
// character not valid in local part unless
// local part is quoted
if (!preg_match('/^"(\\\\"|[^"])+"$/',
str_replace("\\\\","",$local)))
{
$isValid = false;
}
}
if ($isValid && !(checkdnsrr($domain,"MX") ||
↪checkdnsrr($domain,"A")))
{
// 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
}
|
|
|
|
|
![]() |






