Avatar billede nemlig Professor
12. december 2009 - 15:38 Der er 9 kommentarer og
1 løsning

Lille tilretning af kontrol-funktion til korrekt email

Hejsa.
Jeg har denne funktion til at kontrollere for korrekt indtastning.
Den vil ikke acceptere domænenavne med .info (altså 4 tegn til sidst).
Er det nemt løst ?

function check_email($email) {
if((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) {
$host = explode('@', $email);
if (function_exists("checkdnsrr")) {
if(checkdnsrr($host[1].'.', 'MX') ) return TRUE;
if(checkdnsrr($host[1].'.', 'A') ) return TRUE;
if(checkdnsrr($host[1].'.', 'CNAME') ) return TRUE;
} else { return TRUE;}

}
return FALSE;
}
Avatar billede repox Seniormester
12. december 2009 - 17:45 #1
Mon ikke du skulle overveje at simplificere din kontrol af emailen og så vælge bare en enkelt af metoderne?
12. december 2009 - 19:30 #2
Jeg har ikke umiddelbart gennemskuet hele din expression i if(preg_match....), men hvis du siger at det virker med domainenavne med to eller tre tegn efter det sidste . saa maa det vel vaere saadan.

Jeg tester mere begraenset paa mit system som saadan:

<?
$email = "christian.jorgensen@skynet.be";
if(preg_match('/^.+\@[a-zA-Z0-9\-\.]+\.([a-zA-Z.]{2,3}|[0-9]{1,3})$/',$email) )echo "matches<br/>";
?>

Saa faar jeg som resultat "matches," men hvis jeg proever med $email = "christian.jorgensen@skynet.info" saa faar jeg ingen match.  Det kan afhjaelpes ved at jeg aendrer {2,3} til {2,4}, altsaa

<?
$email = "christian.jorgensen@skynet.info";
if(preg_match('/^.+\@[a-zA-Z0-9\-\.]+\.([a-zA-Z.]{2,4}|[0-9]{1,3})$/',$email) )echo "matches<br/>";
?>
hvilket giver "matches."

Saa proev i din expression at erstatte {2,3} med {2,4), altsaa:

if((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/',$email)) )
Avatar billede nemlig Professor
14. december 2009 - 08:52 #3
repox: Hvorfor skulle jeg det? Jeg synes fx. at det er smart, at scriptet kan tjekke om domænet eksisterer.
I øvrigt har jeg anvendt scriptet længe uden problemer. Der har åbenbart ikke været indtastet en email-adresse i systemet med endelsen "info".

Christian_belgien: Tak for bidraget - det løste problemet. Sender du et svar!
14. december 2009 - 09:32 #4
Jamen det var da godt det virkede.
Avatar billede repox Seniormester
14. december 2009 - 10:03 #5
#3
Af samme årsag som man ikke skyder gråspurve med kanoner for.

Men hvis du synes det er smart at man kontrollerer domænet, hvorfor så ikke nøjes med den? Så havde du ikke behøvet de to andre... men skidt, du synes det er en smart funktion samlet og så er det jo fint at du fik det til at virke som du gerne ville...
Avatar billede nemlig Professor
14. december 2009 - 10:10 #6
Repox: Åhrrr - så forstår jeg din pointe :) Problemet er bare, at nogle servere (vist nok windows servere) ikke understøtter checkdnsrr()- derfor er det rart i disse tilfælde, at jeg så kan tjekke indtastnings-syntaxen.
Scriptet anvendes nemlig på forskellige servere/webhoteller.
Avatar billede repox Seniormester
14. december 2009 - 10:17 #7
#6
Men, hvis det check ikke er fyldestgørende alligevel, er det så ikke godt nok blot at nøjes med en enkelt regexp? Istedet for to regexp's og et dns opslag? Du benytter jo ikke den data du opsamler med dns opslaget alligevel, så hvorfor lave et unødvendigt opslag?
Avatar billede repox Seniormester
14. december 2009 - 10:20 #8
Og lige for at følge op på det; dns opslaget er jo unødvendigt da emailadressen opghpetughpghopdghapoghapioghapruioghapioghpotghaprtghaoprghaegaertgaeg@example.org sandsynligvis ikke har en modtager på example.org, men alligevel klarer alle tre checks (såfremt dns opslaget virker på den server også).
Avatar billede nemlig Professor
14. december 2009 - 10:31 #9
Jeg må indrømme, at jeg ikke kan gennemskue de 2 x preg_match(), så du kan sikkert have ret i at den ene kan udelades.

Tjekket på domænet, synes jeg dog er meget smart, idet scriptet som regel fanger stavefejl i domænenavnet (fx. hodmail.com).
Og jeg er helt bevidst om, at scriptet ikke kan fange alt - herunder det der står foran "@".
Men jo mere den fanger, desto bedre.... :)
Avatar billede repox Seniormester
14. december 2009 - 10:43 #10
meh...

Det afhænger nok også af hvad du skal bruge det til i virkeligheden...
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

IT-JOB

Capgemini Danmark A/S

Open Application (Denmark)

KMD A/S

E2E Tester

Netcompany A/S

IT Consultant

Netcompany A/S

Managing Architect

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Analytiker til Security Operations Center i Cyberdivisionen