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.
- Napsal: bobocop, 2.05.2005, 18:09:00
- Kategorie: Webdesign
- Trvalý odkaz
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...
Archivy
- červenec 2011
- červen 2011
- květen 2011
- únor 2011
- červenec 2010
- červen 2010
- duben 2010
- březen 2010
- únor 2010
- leden 2010
- listopad 2009
- říjen 2009
- září 2009
- červen 2009
- březen 2009
- prosinec 2008
- listopad 2008
- říjen 2008
- srpen 2008
- červen 2008
- květen 2008
- duben 2008
- březen 2008
- únor 2008
- prosinec 2007
- listopad 2007
- září 2007
- červen 2007
- květen 2007
- duben 2007
- březen 2007
- leden 2007
- prosinec 2006
- říjen 2006
- září 2006
- srpen 2006
- červenec 2006
- červen 2006
- duben 2006
- březen 2006
- únor 2006
- leden 2006
- prosinec 2005
- listopad 2005
- říjen 2005
- září 2005
- srpen 2005
- červenec 2005
- červen 2005
- květen 2005
- duben 2005
- březen 2005
- únor 2005
- leden 2005
- prosinec 2004
- listopad 2004
- říjen 2004
- září 2004
- srpen 2004
- červenec 2004
- červen 2004
Odkazy
- Bohumír Bednařík
- Matějka Koupelny
- Škola pro výcvik vodicích psů pro nevidomé
- Veřejný weblog
- Montáže nábytku
Ostatní
Vyhledávání
Reklama