me na masce vadi na prvni pohled to, ze adresy z domeny tretiho radu podle ni nejsou platne... nejsem si jisty, ale mozna ze v adrese muze byt jeste i jiny nez alfanumericky znak, treba _
pak by me zajimalo, jak to, ze regularnimu vyrazu 234 odpovida regularni vyraz 9912377 (zacatek clanku).
Názory k článku
Regulární výrazy v PHP: Řetězce
masca + otazka
celé vláknoRe: masca + otazka
celé vláknomyslim, ze to podtrizitko by se pouzivat nemelo, nekdy to projde, nekdy nemusi - neni to podle norem
Re: masca + otazka
celé vlákno_ se nesmi pouzit nikdy, protoze to neni povoleny znak pro domenove jmeno, da se pouzit omezene jen uvnitr NT siti, protoze NT4 ho pouzit dovoluji, v active directory jiz pouzit nejde.
Externe pouzit nejde, zadna verze bindu ho bez specialni konfigurace nebo hacku nedovoli
Re: masca + otazka
celé vláknoTo podtrzitko by v domenovem jmene opravdu byt nemelo .. odkazy na vic informaci najdete treba tady:
http://www.camtp.uni-mb.si/books/Internet-Book/DNS_NameFormat.html
Clanek sity horkou jehlou
celé vláknoUz jak je v prvnim prispevku zminena chyba na zacatku, tak tady je dalsi:
132$ vyhoví například abc123, ale ne 123abc,
nevim jak by to tomu mohlo vyhovovat
Re: Clanek sity horkou jehlou
celé vláknochyby
celé vláknofajn clanek, ale mozna by stalo za to si clanek po sobe precist...
vyrazu 234 bude asi tezko odpovidat 9912377, vyrazu 132$ bude asi tezko odpovidat abc123, ...
Re: chyby
celé vláknoOpravim oboji a servu autora, diky :)
nedostatek
celé vláknoPodle mne uvedena maska nedovoli zapis tecek v retezci pred zavinacem - '^([[:alnum:]]+)@ - dovoli jen alfanumericke znaky. Pritom je mozne mit adresu jako jmeno.prijmeni@neco.cz ..
Re: nedostatek
celé vláknoSprávně, takže třeba takhle?
$maska = '^([[:alnum:]]+)(\.[[:alnum:]]+)+@(([[:alnum:]]+)\.)+([[:alpha:]]{2,4})$';
Re: nedostatek
celé vláknoSpatne, co takle vzit RFC 2822 a 2821 a napsat to tak, jak je tam emailova adresa definovana.
Akorat to bude mozna na par radek.
Re: nedostatek
celé vláknoJasně, řešil jsem jen ty tečky.
Na čtení RFC teď nemám čas ;-)
Re: nedostatek
celé vláknoŘeknu vám, že je to maso, ale jestliže by jste šli až na dřeň tak by z toho byl pěkný guláš, ale tenhle řetězec by měl stačit:
[[:alnum:]]+(\.[[:alnum:]]+)*@((([[:alnum:]]+\.)+[[:alpha:]]{2,4})|(([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}))
Re: nedostatek
celé vláknopozor na to + pred zavinacem, takhle by to vnucovalo ten teckovany tvar adresy (proslo by ja.jo@nekde.cz ale ne ne@nekde.cz), spravne tedy s hvezdickou
Re: nedostatek
celé vláknoHmm, to je pravda.
Chybicka se vloudila. Nejak jsem to na posledni chvili poprehazoval a uz neotestoval :-)
knihovna
celé vláknoA co se inspirovat tady?
http://www.regexlib.com/DisplayPatterns.aspx
Re: knihovna
celé vláknoProgramatoři pod asp jsou tradičně kvalitní. Já bych se radši inspiroval http://www.faqs.org/rfcs/rfc2822.html nebo přinejhorším http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html
Co by jeste neproslo
celé vláknoV domene druheho radu muze byt i pomlcka, ktera neni alfanumerickym znakem, tedy misto prosteho [[:alnum:]] by se dalo pouzit treba [a-zA-Z\-]. V nazvu schranky (uzivatelskem jmene, proste tim pred zavinacem) pro zmenu muze byt podtrzitko a jak uz bylo receno i tecka (ne vsak vice tecek za sebou).. [a-zA-Z_\-]+(\.[a-zA-Z_\-]+)*
Pak urcite existuji omezeni kde ty pomlcky a podtrzitka mohou byt (myslim si, ze by domena nemela pomlckou zacinat, snad ani koncit, ale to uz nevim...), takze pro uplnou spravnost by to bylo zrejme jeste o neco malo slozitejsi, ale kdo by to uz takhle kontroloval?... :)
Re: Co by jeste neproslo
celé vláknoNo někdo to kontroluje ještě dál, třeba pro Perl existuje modul: http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html
Původně jsem chtěl sem ten regexp hodit, ale to by jste mě neměli rádi :-)
'|' predstavuje konjukci ?
celé vlákno"Další důležitou pomůckou je speciální znak | (svislá čára). Má význam konjunkce"
..neni to nahodou disjunkce?
Bez titulku
celé vláknoJooo takze,
Omlouvam se za ty dve chybicky v cislech, uz jsou opraveny... Dale | znamena samozrejme disjunkci a ne konjunkci. Uznavam chybu a jeste jednou se omlouvam... SORRY :)
A ted k domacimu ukolu:
Nekteri z vas jsou uz docela hodne blizko, ne-li ve finishi protoze moznosti, jak docilit vysledku je samozrejme vic. Diky za praci co jste si s tim dali :)
Autor clanku
a prošlo by tohle?
celé vlákno+420602111111@sms.eurotel.cz ? jak jsem to narychlo pochopil tak asi ne, že jo?
Jak ma vypadat overeni emailu v praxi...
celé vláknoClanek je k nicemu a o nicem - tem, kteri se v regexp vyrazech vyznaji jen poskytuje vitanou moznost zepsout autora za chyby, ti, kteri v nich zatim tapou a doufali, ze jim pomuze, musi byt nutne zklamani.
Nicmene regulani vyraz, ktery by overil sparvny format emailu by mohl vypadat zhruba takto (jednotlive casti se pokusim vysvetlit ponekud lepe nez autor clanku):
^([A-Za-z0-9-_\.]+)@([A-Za-z0-9\.]+)\.([a-z]{2,7})$
Znak ^ rika, ze jsme na zacatku retezce. Dale nasleduje specifikace moznych znaku, ktere se mohou vyskytnout v casti pred zavinacem - tedy alfanumericke znaky a podtrziko, pomlcka ci tecka (musi byt "odescapovana" zpetnym lomitkem, cimz ztrati svuj specialni vyznam zastupce libovolneho znaku). Znak "+" rika, ze tato cast nesmi byt prazdna, resp. musi obsahovat alespon jeden ze specifikovanych znaku (zde by bylo na miste rict, ze by asi nebylo dobre povolit adresu typu _@domena.tld atp., ale teoreticky to mozne je).
Nasleduje zavinac jakozto neoddiskutovatelne povinny znak. Cast za nim specifikuje domenu - tato cast se muze opet skladat pouze z alfanumerickych znaku nebo tecky (pokud se jedna o 3rd level domenu - napr. user@3rdlevel.2ndlevel.tld atp.). Pokud budeme mene striktni, muzeme i v teto casti povolit i podtrzitko a pomlcku.
Dale nutne musi nasledovat znak tecka a ve finale 2 - 7 znaku vyhradne v mezich malych alpha znaku (a-z)! (nezapomenme na nove tld domeny dosahujici teto delky! - tld domena culture).
Na zaver se omlouvam za ponekud delsi vylev, obvykle nemam ve zvyku clanky na rootu komentovat, ale tento mi prisel - bohuzel - tak spatny, ze jsem si to neodpustil ;)
Re: Jak ma vypadat overeni emailu v praxi...
celé vláknoNepatrim mezi lidi, kteri nesnesou kritiku, ale kritiku, ktera je spatna alespon bez citovych vylevu opravim :)
Coolfighter napsal:
"tem, kteri se v regexp vyrazech vyznaji jen poskytuje vitanou moznost zepsout autora za chyby"
Tak se podivame na tvoje chyby a neni jich malo:
1) Co je v prvni casti retezce to 0-9-_ ? Mnozina znaku 0 az 9 az pomlcka? Ma to byt samozrejme 0-9\-_ :)
2) V casti za zavinacem si necitoval znak - (tedy \-).. Neprosel by tedy napriklad email coolfighter@e-mail.cz
3) Coolfighter napsal: "a ve finale 2 - 7 znaku vyhradne v mezich malych alpha znaku (a-z)!"
Tak v mezich vyhradne malych alpha znaku? Nejsem prvni kdo to rika takze budu citovat; Vega napsal:
"koncovka může být i velkejma písmenama :) Sice to píšou jenom prasata, ale chci tě vidět to písemně vysvětlovat na svym webu dementnim uzivatelum... Misto toho radši použij strtolower :)"
Dodavam jen, ze uz jsem se setkal s lidmi co mi poslali mail jako neco.CZ
Tak to jsem mel na srdci. V necem jsem sice napovedel ostatnim jak to ma byt nejlepe (to stejne neni na skodu), ale tvuj komentar je takovy, ze jsem si to neodpustil :)
Re: Jak ma vypadat overeni emailu v praxi...
celé vláknoJen k tomu, ze BFU se v clanku nic nedozvi - priznavam otevrene, ze ja sama coby editor jsem autora navedla, aby to pojal tak, ze uplne zaklady nebude prilis podrobne prozivat (v puvodni verzi tam byl dost dlouhy uvod do nich) - vetsina lidi v nejake forme regularni vyrazy zna (z bezneho sebu, perlu, vimu apod.), jde o to, ze jsou jich ledasjake druhy a rozsireni a prislo mi fajn, aby clovek, co prijde k PHP a regularni vyrazy jiz odnekud jinud zna, se zde dozvedel, jak to tam s nimi je a jak je muze pouzivat.
Ja osobne z PHP neumim ani radku, ale regularnich vyrazu obecne znam kupu implementaci, proto, az se budu chtit naucit PHP, se zde rada dozvim to male delta informaci, abych tam mohla pouzit to, co uz znam.
Re: Jak ma vypadat overeni emailu v praxi...
celé vláknoV PHP je pcre (jmenuje se preg). Pro člověka, který zná regulární výrazy z běžného perlu [sic], by stačila tato jediná věta.
Re: Jak ma vypadat overeni emailu v praxi...
celé vláknosnad jen toto:
pokud o nekom napisete, ze nic neumi, zamyslete se nejdriv nad sebou.
vas r.v.
^([A-Za-z0-9-_\.]+)@([A-Za-z0-9\.]+)\.([a-z]{2,7})$
po opravene chybce
^([A-Za-z0-9\-_\.]+)@([A-Za-z0-9\.]+)\.([a-z]{2,7})$
pusti treba i adresu
.@..cz
pokud si nejste jisty, exisuje jedna krasna stranka: http://www.regexp.cz/
doporuciji obcas pouzit, o mozku nemluve
p.g.
Re: Jak ma vypadat overeni emailu v praxi...
celé vláknono na regexp.cz hned na uvodni strance vidim tuhle masku pro email:
^[_a-zA-Z0-9\.\-]+@[_a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}$
to mimo jine taky pusti adresu .@..cz :)
takze o mozku opravdu nemluvme :)
Re: Jak ma vypadat overeni emailu v praxi...
celé vláknoNa stranku jsem odkazal proto, ze se tam da velmi rychle a jednoduse r.v. vyzkouset. Ne aby tam byly cerpany nesmysly...
Stale tvrdim, ze je lepsi obcas pouzit mozek...
Dobry clanek
celé vláknopodle mne celkem dobrý článek. Ke kritice k chybám v textu, to je samozřejmě špatně. Jinak to je článek na úrovni. Ke kritice od fightera: Jak si popisoval ten svůj regulární výraz. Vlastně vysvětluješ metaznaky uplně stejně jako autor... tak nevim co ti vadí a ten tvuj výraz je stejně špatnej... koncovka může být i velkejma písmenama :) Sice to píšou jenom prasata, ale chci tě vidět to písemně vysvětlovat na svym webu dementnim uzivatelum... Misto toho radši použij strtolower :) Takže nekritizuj něco čemu nerozumíš :) A neoháněj se cizíma slovama, o kterých si myslíš, že je ostatní neznaj :)
Ovsem pokud chces se regularni vyrazy ucit z clanku... no nevim neni to kompletni a tak. Snad to nemela byt ucebnice. Odkazy na zdroje jsou taky tak je to docela ok, i když něco bych udělal obratněji... Dávám dvojku :)
perl regexp
celé vláknoClanok som prebehol iba velmi rychlo, pretoze POSIX regularne vyrazy su oproti tym perlovskym (tiez podporovane standardne v PHP) velmi slabe. Tiez reg matching je u tych POSIX pomalsi a da sa ziskat iba max. 10 podvyrazov (pouzitim zatvoriek (...) ). Perlovske regexp maju take krasotinky ako asercie, podmienky, .. a ine krasne features, vseliake flagy vyhladavania (multiline, extened, case sensitivity a co ja viem este ake). a napr namiesto dlhych [[:digit:]], [[:alnum:]], [[:space:]] [[:<:]] a dalsich masakrov staci napisat \d \w \s \b. A funkcia preg_replace_callback je niekedy na nezaplatenie. Perl regularnym vyrazom saom napisal reverzny proxyserver. To bol vyraz na pol strany, mal vseliake podmienky, vetvenia, callbacky .. lahodka :) mnam.
Takze, kto xe robit s regularnymi vyrazmi nieco fakt vazne, fakt vrele odporucam perlovske a NIE POSIX regexpy! Nastudujte si ich a uvidite, ze regularne vyrazy vo vseobecnosti a hlavne perlovske vam zmenia zivot k lepsiemu :). Rucim za to :-P (PS: v dokumentacii k PHP je podla mna vyborny popis perlovskych regexp; PPS: JavaScript vyuziva tiez perlovske regexp!)
Re: perl regexp
celé vláknoHm hm hm, až jednou napíšete regexep, a on se bude matchovat a matchovat a matchovat ... a nikdy to neskončí, tak si možná pak přečtete něco o tom, že složitost matchování posixových regulárních výrazů nemůže -- na rozdíl od pcre -- růst exponenciálně. Takže *identický* výraz preg matchne rychleji (to je pravda a čistě implementační otázka, nechcete doufám tvdrit, že je ta rychlost inherentní vlastnost těch výrazů), ale jinak tupý (a delší) posixový regexp snadno může matchnout rychlejí než krátký a chytrý pcre řešící tentýž problém, protože složitost je skrytá. Takže s rychlostí bych byl opatrný...
Re: perl regexp
celé vláknoNo, nevim, ja jsem nedavno prepisoval regexp z posix do perlu protoze posix verze se zasekla ... ale predpokladam ze je to chyba implementace, pravdepodobne souvisejici s podporou multiline.
Re: perl regexp
celé vláknoje pravda, ze pcre ma nejake vyhody oprotio posixum... Clanek jsem zameril na posix proto, ze v php je defaultne podoprovan (a toto je clanek o php). pcre nekdy taky ale...
mam ale v planech v budoucnu venovat kus casu i pcre :)
Re: perl regexp
celé vláknoTak tak, kdo dela chviliv perlu a pak neco v PHP a naopak, tak jedine PCRE, mimochodem MS regexp, co jsou jako COM komponenta jsou taky ty perlovske, skoda, jen, ze tam nemaji split, jako PHP
Kontrola správnosti adresy
celé vláknoKdyž už jste to nakousl, možná by nebylo na škodu upozornit BFU, že se má po kontrole regulárním výrazem podívat, jestli existuje MX record, případně A record (viz. getmxrr a podobné funkce).
Jinak co se týče článku, tak tentokrát mám pocit, že to bylo opravdu poněkud nedovařené a nejlepším zdrojem informací o tom, jak fungují POSIXové regulární výrazy, zůstane prozatím man page pro regex.
Re: Kontrola správnosti adresy
celé vláknoNejlepsis zdrojem jsou bezesporu manualy :) Nechtel jsem to udelat jako ucebnici (manualu je vsude dost), ba dokonce jsem ani nemohl :) Priste se to trochu rozjede do prikladu, tak snad :)
Nejasné zadání - nejasný výsledek
celé vláknoChtěl bych autora článku upozornit, že pokud zadá úkol "nejasně" (alespoň dle debaty, jak formát emailu vlastně vypadá), pak jen obtížně najde "výsledek", na kterém se všichni shodnou ! Pak je zbytečně znevažována jeho práce a to je škoda !
Kdyby se postupovalo od jednoduššího ke složitějšímu, bylo by to didaktičtější -
např. nejprve vzor pro email: "prijmeni@root.cz", pak "jmeno.prijmeni@root.cz", přes "predzavinacem@root.cz" až k "predzavinacem@zazavinacem.domena" atd. s tim, že se popíší výše uvedené množiny znaků jednoduššími regulárními výrazy a ty se pak sečtou (lze tuto operaci na tělese reg. výrazů použít ? ;-)
článek na ho*no
celé vláknoA zmínit jaxe piše AND OR XOR NOT autora článku jaxi nenapadlo???
Re: článek na ho*no
celé vláknoOrwell? to se uz lidi nestydej podepisovat Einstein nebo Havel a naopak se stydej za svoje meno?
chyba v masce
celé vláknoKdyz uz jsme u tech chyb...
$maska = '^([[:alnum:]]+)@([[:alnum:]]+)\.([[:alpha:]]{2,4})$';
...tak v PHP se nepise string mezi apostrofy, ale mezi uvozovky.
Re: chyba v masce
celé vláknomuze se oboje, takhle je to lepsi z hlediska prehlednosti, vzhledem k tomu, ze by se museli escapovat znaky z hlediska php i z hlediska regexpu
maska pro e-mail
celé vláknocetl jsem vsechny prispevky a myslim ze do toho zacinam videt. co rikate na tuhle masku:
^[a-zA-Z0-9_+-]+(\.[a-zA-Z0-9_+-]+)*@((([a-zA-Z0-9_-]+\.)+[a-zA-Z0-9]{2,})|(([0-9]{1,3}\.){3}[[0-9]{1,3}))$
- akceptuje "_", "+", "-" v casti pred zavinacem
- akceptuje vice casti jmena pred zavinacem (oddelenych "." )
- akceptuje viceurovnovou domenu nebo ip adresu
- myslim ze je to maska docela pouzitelna pro hrube odfiltrovani vylozene neplatnych emailovych adres
-jj-
programování PHP
celé vláknoprosím Vás, měli bychom zájem o naprogramování kódu pro realitní
portál, pomocí kterého bychom chtěli zajistit prodej a koupi
realit. Například něco jako je http://www.realexpres.cz.
Je možné se na Vás obrátit a získat informace ohledně
ceny atd ... ?
Děkujeme AXJ s.r.o.
Jirmásek Jindřich
www.axj.cz 777 006 606

