[ borquee @ 23.08.2003. 09:21 ] @
jel ima neko ispravniji regular expression pattern za verifikaciju emaila

do sada sam nasao:

(\w+[\w|\.|-]*\w+)(@\w+[\w|\.|-]*\w+\.\w{2,4})

ali se nije pokazao bas najbolje
[ Gojko Vujovic @ 23.08.2003. 09:44 ] @
Samo da te upozorim da se upuštaš u opasnu oblast jer pisanje kompletnog rešenja za taj problem može da potraje i danima. Zavisi naravno dokle želiš da ideš, ali kompletan regexp za na primer neki MTA bi morao da prepoznaje dosta toga.. Daću ti samo primere validnih email adresa i to bez grešaka, koje svaki MTA mora da prepozna.. a zamisli tek ako korisnik unese i neke greške u unos a od tvog programa se očekuje da pravilno razazna šta je email adresa:

[email protected]
<[email protected]>
Gojko Vujovic <[email protected]>
"Gojko Vujovic", [email protected]
"Gojko Vujovic" <[email protected]>
Gojko <"gojko"@negde.com> (ova adresa se slabo koristi)

Ovo poslednje je preterivanje ali je savršeno ispravna email adresa, barem što se specifikacije tiče!

Imaš na netu dosta primera, u mastering regular expressions knjizi imaš i dva prilično kompleksna od 4 i 6 hiljada bajtova, a na tebi je da odlučiš koliko daleko želiš da ideš sa ovim..
[ borquee @ 23.08.2003. 10:24 ] @
pa recimo da bi mi trebalo neko resenje koje nece ukociti server...
a od korisnika ocekujem da unese obican mail tipa

[email protected]

tj. da ne prihvati drugacije (bez navodnika i <>)
[ -zombie- @ 24.08.2003. 03:58 ] @
ma zeza te malo gojko..

evo ti moj predlog..

Code:

[^@]+               # username (ovo ovde je diskutabilno)
@
([\w-]+\.)+         # bar jedan domen, a možda i koji poddomen
w{2,4}              # TLD


jedino je diskutabilan ovaj username deo. elem, umesto negativne klase koja isključuje samo @, možeš da nabrojiš sve moguće karaktere, ali ja nisam siguran koji su sve dozvoljeni, pa koristim ovo..
[ bOkIcA @ 24.08.2003. 05:07 ] @
Code:
^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$


Ovo nije moj regexp (naleteo sam na njega), ali bi trebao da se dosta poklapa sa RFC 2822.

recimo, ovaj regexp ne resava mailove tipa: [email protected]


Da li ima raspolozenih da ucestvuju u pravljenju PRAVOG regexp-a po RFC2822 standardu?
Da zajedno proucimo standard i polako napravimo tacan regexp.
[ bOkIcA @ 24.08.2003. 05:55 ] @
Ma jok, kakav regexp, ko jos ima vremena da se zeza oko toga.

Ja trenutno koristim ovu klasu koja proverava da li postoji dns rekord i kaci se na mail server i proverava da li je email deliverable.
Treba li bolje???
[ -zombie- @ 24.08.2003. 09:04 ] @
jel se ti to sam sa sobom svađaš (imaš glasove u glavi) ili je neko seo za komp dok si ti bio ulogovan :P

nego, ovaj regex što je bokica broj 1 dao ne valja za ku^H^H ništa..

a ova klasa što je bokica 2 dao, u velikom broju slučajeva (na mnogim serverima/kombinacijama) ne radi, pa se ni ne vredi cimati...



da pojasnim, regex treba da služi samo kao prva provera čisto da se detektuje kada korisnik pogreši i na sajtu unese lošu mail adresu.


ako treba da se stvarno osigura da je to prava (validna) mail adresa koju čita taj korisnik, onda mu lepo pošaljete mail sa linkom za "overu" ili "potvrdu" mail adrese, i uživate..


zaključak: odradite regex proveru samo kao pred-proveru (za to može da posluži i onaj prosti regex koji sam ja dao), a ako vam je stvarno stalo da budete sigurni, pošaljite lepo mail na unesenu adresu.......
[ bOkIcA @ 25.08.2003. 01:41 ] @
jes, svadjao sam se ;-)

al sam to tek sad skontao
[ bluesman @ 25.08.2003. 22:13 ] @
Evoj PHP funkcije koju ja korisitim:

Code:

function validateEmail($strEmail)

    return ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+' .
        '@' .
        '[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.' .
        '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$',
        $strEmail);
}


pokazala se ok do sada. I u pravu je Gojko, dosta sam se zezao sa ovim, tako da i ne znam zasto Vam dajem tako olako :-)))
[ -zombie- @ 26.08.2003. 10:30 ] @
izvini, ali ti si se baš trudio oko ovoga?

ja sam se oko moje potrudio nekih 15tak sekundi.. a radi bolje...

Code:

$a[]='[email protected]';
$a[]='[email protected]';
$a[]='[email protected]_....';
$a[]='[email protected]=`~!$%^&*-._=+';

foreach ($a as $e) {
    echo "<br/>$e: ".(0+validateEmail($e));
}


objasni mi molim te kako su ove četri ispravne email adrese?!? (pozivam tvoju f-ju).


napomena: ni moj regex nije idealan, pored opisanog problema sa username, prolaze i adrese tipa [email protected], što mislim da nije legalno ime domena, ali to ionako rešava slanje maila za verifikaciju...
[ bOkIcA @ 26.08.2003. 15:05 ] @
Code:
<?php

$email[] = "[email protected]";
$email[] = "[email protected]";
$email[] = "1nes [email protected]";
$email[] = "[email protected]";
$email[] = "[email protected]";
$email[] = "[email protected]";
$email[] = "[email protected]";
$email[] = "[email protected]";

foreach ($email as $trt){
     echo "Email '$trt' " . ((is_email($trt))?"":"ni") . "je validan.<br>\r\n";
}

function is_email($email) {

     $eml_pocetak = "[a-zA-Z0-9_][a-zA-Z0-9-_.]*[a-zA-Z0-9_.]@";
     $eml_kraj = "(([a-zA-Z0-9_][a-zA-Z0-9-_]*[a-zA-Z0-9_][.])+([a-zA-Z]{2,6}))";
     $eml_ip = "((\b([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}\b([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5]))";
    
     $eml_regexp = "/^$eml_pocetak($eml_kraj|$eml_ip)$/";

     if (preg_match($eml_regexp,$email))
          return true;

     return false;
}
?>

Code:
// kompletan regexp (u jednom redu)
// $reg = "/^[a-zA-Z0-9_][a-zA-Z0-9-_.]*[a-zA-Z0-9_.]@((([a-zA-Z0-9_][a-zA-Z0-9-_]*[a-zA-Z0-9_][.])+([a-zA-Z]{2,6}))|((\b([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}\b([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])))$/"

Ajd testirajte, zanima me jesam li blizu.
(voleo bih kad bi neko mogao da testira ovo na nekoj velikoj mailing listi)
[ bluesman @ 27.08.2003. 02:14 ] @
Citat:
-zombie-:
izvini, ali ti si se baš trudio oko ovoga?
ja sam se oko moje potrudio nekih 15tak sekundi.. a radi bolje...


Hej, super si ti decko, samo si mnogo napet, nauci da se opustis malo. Procitaj jos jednom sta sam napisao i obrati paznju na par karaktera na kraju recenice.

Kladim se da i ja mogu da radim nesto brze od tebe, eto ja mogu da popijem 0.7 L piva za 11 sekundi, tako sam jednom i pobedio na takmicenju u brzom ispijanju piva, hoces da se oprobas samnom? :-)))

p.s. Samo gledam tvoje poruke u poslednje vreme i odaju utisak jednog vrlo nervoznog coveka. Suvise si mlad za takav attitude, opusti se malo - nije u pitanju zivot i smrt za svaku glupost.
[ CONFIQ @ 27.08.2003. 02:31 ] @
Pa ne, samo smešno zvuči „jako teško se opraštam od nje” kao da... :Đ

Anyway, ne znam zašto su svi napisali u PHPu, kao da Javascript ne bi mogao da odradi identičan posao. :P A što se tiče PHP-a, dečko može da nađe neku class-u koja će da odradi taj posao za njega tako da ne mora da izmišlja toplu vodu. Doduše i ja ponekad pišem nešto što već postoji classa za to...

~Say... My 2 cents
[ bluesman @ 27.08.2003. 11:22 ] @
pa i treba smesno da zvuci...
[ -zombie- @ 27.08.2003. 12:11 ] @
da.. sorry.. my bad.. nisam provalio da se zezaš.. kao što confiq reče, smešno je zvučalo, ali (priznaj ;) nije delovalo da se ti šališ :-P

ma šta ću.. ja ionako odavno pričam da su ovi pixeli na ekranu suviše siromašni da bi lepo iskazali ono što je "pisac time 'teo da kaže..." (uz sve smajlije i druga čuda moderne tehnike koje izmisle ;)


ali za piwo ti ne verujem.. za to sam spreman i da se kladim!! :D


a za napetost, šta ćeš.. vreme odmora, a ja nikad više posla.. pa onda dođem ovde da se iskalim i ispljujem svakog kog stignem.. :-Pp

a za osale "poruke u poslednje vreme".. hm.. na šta misliš.. nisam primetio (da je neko drugi primetio ;)))


u svakom slučaju, imaš piwo od mene prvom prilikom.. poz :x)
[ bluesman @ 27.08.2003. 15:05 ] @
Ma samo se opusti... :-))

Nego, bolje da verujes za pivo, i to je bilo ono... kvalifikacije, 1/4 finale, 1/2 finale, finale, pa smo u finalu bili "draw" pa smo morali jos jednom, a konkurencija internacionalna (ispostavilo se da englezi vise pricaju da piju nego sto stvarno mogu da piju) ... skoro sam se onesvestio posle. A sto se ponude tice, ko izgubi moda odmah da popije jos jednu i plati sve. ok? Ali 'ajde da ne privatizujemo (opet) ovo sve ...
[ CtrlAltDel @ 20.06.2006. 14:45 ] @
sto se tice regex-a i maila ja koristim ovo:

if(!eregi("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,2}$", '[email protected]')) {
echo "Neispravan mail";
};
[ Gojko Vujovic @ 20.06.2006. 15:01 ] @
Ne valja.

Prolazi ti: [email protected] (neispravan domen)
Ne prolazi ti: [email protected] (gmail labels, ispravan email)
[ Ivan.Markovic @ 20.06.2006. 16:41 ] @
Mozda ovde http://www.scriptarchive.com/d...&c=txt&f=FormMail%2Epl nadjete resenje.