Regulární výraz pro kontrolu e-mailu - update

Na základě konzultace kódu s Jakubem Vránou ze serveru PHP triky jsem se rozhodl kód regulárního výrazu pro kontrolu e-mailu upravit tak, aby již neobsahoval jím nalezené chyby a zároveň aby odpovídal specifikaci uvedené v RFC 2822 a RFC 1035, alespoň podle toho jak jsem je já osobně pochopil s mojí (ne)znalostí angličtiny.

Správný kód je tedy následující (až na výjimky nekomentovaný):

$atom = '[-a-z0-9!#$%&'*+/=?^_`{|}~]'; // znaky ktere mohou byt pred zavinacem
$domain = '([a-z]([-a-z0-9]*[a-z0-9]+)?)'; // znaky, ktere mohou byt v domene
$regex = '^' . $atom . '+(.' . $atom . '+)*' .
'@' .
'(' . $domain . '{1,63}.)+' . $domain . '{2,63}$';
 

Zůstává samozřejmě v platnosti to, že pokud má kód fungovat, musí být použit ve funkci, která nerozlišuje velikost písmen, tedy například ve funkci eregi.

Komentáře

IP adresa 

Ještě je možné, aby namísto domény byla zadána IP adresa. Potom by tedy doména nemusela začínat písmenem a-z.

Napsal(a): dgx (http://www.dgx.cz/trine/), 30.05.2005, 20:55:10

Re: IP adresa 

Ano, o této možnosti samozřejmě vím, ale neměl jsem chuť (ani zkušenosti) tuto situaci řešit. Neznám nikoho, kdo by svoji e-mailovou adresu psal jako "example@123.456.789.012". Ty svoje e-mailové adresy takto píšeš? Nevěřím.
Já samozřejmě nechci tvrdit, že taková adresa nemůže existovat (protože vím, že může), ale kolik bude takových lidí, kteří by používali adresu v tomto tvaru? Proto si myslím, že pro použití někde na blogu, na osobních stránkách v mailovém formuláři a podobně je ten kód naprosto dostačující.

Napsal(a): Bohumír Bednařík (BoboCop) (http://www.bobocop.cz/webdesign.php), 31.05.2005, 08:52:45

 

a co třeba http://1.cz/kontakt.php

Napsal(a): dgx (http://www.dgx.cz/trine/), 31.05.2005, 13:28:54

Re: 

Podle specifikace, ze které jsem vycházel, to není platná adresa. Teď je tedy otázkou, zda jsem vycházel ze správné specifikace (teď mám na mysli hlavně RFC 1035). Pokud bych vycházel pouze z RFC 2822, pak by v uvedeném kódu mohla být proměnná $domain nahrazena proměnnou $atom.

Napsal(a): Bohumír Bednařík (BoboCop) (http://www.bobocop.cz/), 31.05.2005, 13:44:17

Dík za snahu 

Ahoj,
faktem je, že i vznik podobné diskuse je hodně přínosnej, natož potom sám regulérní výraz (kterej jsem právě implementoval do svojeho webu). Proto bych Vám chtěl poděkovat, protože jste mi uštřili dost času.

Díky moc, Fanda

Napsal(a): František Šidák , 09.06.2005, 16:01:07

Re: Dík za snahu 

No není zač. Rádo se stalo. Právě z takového důvodu jsem článek psal, abych případně pomohl i někomu dalšímu.

Napsal(a): Bohumír Bednařík (BoboCop) (http://www.bobocop.cz/blog/), 09.06.2005, 17:56:32

Ma to zmysel? 

uz som videl viacero ludi, ktory sa pokusili sformulovat regexp na validaciu e-mailovych adries na zaklade roznych RFC, a najzaujimavejsi bol tento:

http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

ale neviem, ci sa ma zmysel tym zaoberat az do takejto hlbky... ak ta niekto chce oklamat neplatnou e-mailovou adresou, oklame ta - nezavisle na tom, aky expression pouzijes - staci zadat adresu ako foo@foo.xy a tvoj retazec nezmoze nic :(. ja osobne si vystacim s klasickym

^.+@.+..+$

ktory odradi zbludulych unudencov pokusajucich sa sabotovat nahodne najdene aplikacie, no nezastavi skusenejsich - tych ale nezastavi nic, ani ten tvoj...

Napsal(a): johny (http://www.d42.sk/), 14.06.2005, 20:01:11

 

> johny

No dělám to prakticky stejně, používám ^[^@]+@[^@.]+.[^@]+$ což vlastně jen zaručuje jedinečnost @ a že po něm nebude hned následovat tečka.

Ten odkazovaný regulární výraz je divný, protože hned na začátku hledá rn ...

Napsal(a): dgx (http://www.dgx.cz/trine/), 22.08.2005, 06:16:10

Re: Ma to zmysel? 

E-mailovou adresou se můžou myslet dvě věci. Buď to může být text, který lze napsat do hlaviček To, From a podobných - ten může být velice komplexní, může obsahovat jméno, příznak kódování a spoustu dalších věcí. Výraz v odkazu kontroluje tento. Nebo se tím může myslet samotná e-mailová adresa (která se v hlavičce obvykle píše do špičatých závorek) - a to je většinou také to, co chceme kontrolovat (protože pak z toho můžeme vytvořit celou hlavičku např. i se jménem podle svých představ) a co dělá výraz zde.

Napsal(a): Jakub Vrána (http://php.vrana.cz/), 08.11.2005, 13:43:29

 

Napsal(a): 30.04.2006, 11:38:18

 

Napsal(a): 23.05.2006, 11:15:37

Přidání komentáře...










Poznámky k vyplnění formuláře

Nepoužívejte žádné HTML značky.
URL začínající http:// nebo ftp:// budou převedeny na odkaz.
Aby byl odkaz funkční, musí být z obou stran URL mezera.

   


Přeskočit na obsah