Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Regulární výrazy v PHP: Řetězce

Trekie
Trekie (neregistrovaný)
6. 11. 2003 6:07 Nový

masca + otazka

celé vlákno

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).

M.B
M.B (neregistrovaný)
6. 11. 2003 10:20 Nový

Re: masca + otazka

celé vlákno

myslim, ze to podtrizitko by se pouzivat nemelo, nekdy to projde, nekdy nemusi - neni to podle norem

Dan Ohnesorg
Dan Ohnesorg (neregistrovaný)
6. 11. 2003 10:47 Nový

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

srakyi
srakyi (neregistrovaný)
7. 11. 2003 15:31 Nový

Re: masca + otazka

celé vlákno

To 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

Taptek'Sun
Taptek'Sun (neregistrovaný)
6. 11. 2003 9:34 Nový

Clanek sity horkou jehlou

celé vlákno

Uz 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

Ondřej Cífka
26. 5. 2007 13:44 Nový

Re: Clanek sity horkou jehlou

celé vlákno
No jistě, že to nevyhovuje, když je na konci $. Kdyby to tam nebylo, vyhovuje i 123abc.
ondra
ondra (neregistrovaný)
6. 11. 2003 9:37 Nový

chyby

celé vlákno

fajn 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, ...

Johanka
Johanka (neregistrovaný)
6. 11. 2003 10:19 Nový

Re: chyby

celé vlákno

Opravim oboji a servu autora, diky :)

honza
honza (neregistrovaný)
6. 11. 2003 9:59 Nový

nedostatek

celé vlákno

Podle 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 ..

xenobit
xenobit (neregistrovaný)
6. 11. 2003 10:34 Nový

Re: nedostatek

celé vlákno

Správně, takže třeba takhle?
$maska = '^([[:alnum:]]+)(\.[[:alnum:]]+)+@(([[:alnum:]]+)\.)+([[:alpha:]]{2,4})$';

Dan Ohnesorg
Dan Ohnesorg (neregistrovaný)
6. 11. 2003 10:54 Nový

Re: nedostatek

celé vlákno

Spatne, co takle vzit RFC 2822 a 2821 a napsat to tak, jak je tam emailova adresa definovana.
Akorat to bude mozna na par radek.

xenobit
xenobit (neregistrovaný)
6. 11. 2003 10:59 Nový

Re: nedostatek

celé vlákno

Jasně, řešil jsem jen ty tečky.
Na čtení RFC teď nemám čas ;-)

Pichi
Pichi (neregistrovaný)
6. 11. 2003 13:31 Nový

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}))

Miisha
Miisha (neregistrovaný)
6. 11. 2003 11:35 Nový

Re: nedostatek

celé vlákno

pozor 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

xenobit
xenobit (neregistrovaný)
6. 11. 2003 13:01 Nový

Re: nedostatek

celé vlákno

Hmm, to je pravda.
Chybicka se vloudila. Nejak jsem to na posledni chvili poprehazoval a uz neotestoval :-)

xenobit
xenobit (neregistrovaný)
6. 11. 2003 11:05 Nový

knihovna

celé vlákno

A co se inspirovat tady?
http://www.regexlib.com/DisplayPatterns.aspx

Pichi
Pichi (neregistrovaný)
6. 11. 2003 14:57 Nový

Re: knihovna

celé vlákno

Programatoř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

Miisha
Miisha (neregistrovaný)
6. 11. 2003 11:30 Nový

Co by jeste neproslo

celé vlákno

V 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?... :)

Pichi
Pichi (neregistrovaný)
6. 11. 2003 13:56 Nový

Re: Co by jeste neproslo

celé vlákno

No 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 :-)

Peter
Peter (neregistrovaný)
6. 11. 2003 13:46 Nový

'|' 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?

Lubos Turek
Lubos Turek (neregistrovaný)
6. 11. 2003 16:34 Nový

Bez titulku

celé vlákno

Jooo 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

pooh
pooh (neregistrovaný)
6. 11. 2003 16:55 Nový

a prošlo by tohle?

celé vlákno

+420602111111@sms.eurotel.cz ? jak jsem to narychlo pochopil tak asi ne, že jo?

Coolfighter
Coolfighter (neregistrovaný)
6. 11. 2003 18:30 Nový

Jak ma vypadat overeni emailu v praxi...

celé vlákno

Clanek 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 ;)

Autor
Autor (neregistrovaný)
6. 11. 2003 20:33 Nový

Re: Jak ma vypadat overeni emailu v praxi...

celé vlákno

Nepatrim 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 :)

Johanka
Johanka (neregistrovaný)
6. 11. 2003 21:03 Nový

Re: Jak ma vypadat overeni emailu v praxi...

celé vlákno

Jen 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.

Yeti
Yeti (neregistrovaný)
6. 11. 2003 22:28 Nový

Re: Jak ma vypadat overeni emailu v praxi...

celé vlákno

V 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.

peta
peta (neregistrovaný)
6. 11. 2003 23:35 Nový

Re: Jak ma vypadat overeni emailu v praxi...

celé vlákno

snad 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.

Autor
Autor (neregistrovaný)
7. 11. 2003 17:34 Nový

Re: Jak ma vypadat overeni emailu v praxi...

celé vlákno

no 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 :)

peta
peta (neregistrovaný)
11. 11. 2003 11:02 Nový

Re: Jak ma vypadat overeni emailu v praxi...

celé vlákno

Na 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...

Vega
Vega (neregistrovaný)
6. 11. 2003 20:03 Nový

Dobry clanek

celé vlákno

podle 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 :)

Martin Zdila
Martin Zdila (neregistrovaný)
6. 11. 2003 21:33 Nový

perl regexp

celé vlákno

Clanok 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!)

Yeti
Yeti (neregistrovaný)
6. 11. 2003 22:37 Nový

Re: perl regexp

celé vlákno

Hm 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ý...

hkmaly
hkmaly (neregistrovaný)
7. 11. 2003 16:30 Nový

Re: perl regexp

celé vlákno

No, 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.

Autor
Autor (neregistrovaný)
6. 11. 2003 22:52 Nový

Re: perl regexp

celé vlákno

je 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 :)

bastlir
bastlir (neregistrovaný)
9. 11. 2003 22:39 Nový

Re: perl regexp

celé vlákno

Tak 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

Jirka Pech
Jirka Pech (neregistrovaný)
8. 11. 2003 1:54 Nový

Kontrola správnosti adresy

celé vlákno

Když 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.

Autor
Autor (neregistrovaný)
8. 11. 2003 11:58 Nový

Re: Kontrola správnosti adresy

celé vlákno

Nejlepsis 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 :)

Pedro
Pedro (neregistrovaný)
12. 11. 2003 15:25 Nový

Nejasné zadání - nejasný výsledek

celé vlákno

Chtě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 ? ;-)

George Orwell
George Orwell (neregistrovaný)
13. 12. 2003 10:42 Nový

článek na ho*no

celé vlákno

A zmínit jaxe piše AND OR XOR NOT autora článku jaxi nenapadlo???

uživatel si přál zůstat v anonymitě
7. 1. 2004 0:39 Nový

Re: článek na ho*no

celé vlákno

Orwell? to se uz lidi nestydej podepisovat Einstein nebo Havel a naopak se stydej za svoje meno?

wenca
wenca (neregistrovaný)
23. 1. 2004 23:54 Nový

chyba v masce

celé vlákno

Kdyz uz jsme u tech chyb...

$maska = '^([[:alnum:]]+)@([[:alnum:]]+)\.([[:alpha:]]{2,4})$';

...tak v PHP se nepise string mezi apostrofy, ale mezi uvozovky.

Hoboj
Hoboj (neregistrovaný)
19. 2. 2004 21:30 Nový

Re: chyba v masce

celé vlákno

muze 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

jazzy
jazzy (neregistrovaný)
1. 8. 2004 22:13 Nový

maska pro e-mail

celé vlákno

cetl 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-

AXJ s.r.o. zakázka
AXJ s.r.o. zakázka (neregistrovaný)
1. 11. 2005 21:41 Nový

programování PHP

celé vlákno
Dobrý den,

prosí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
Zasílat nově přidané příspěvky e-mailem