Autor | Zpráva | ||
---|---|---|---|
Filip111 Profil |
#1 · Zasláno: 9. 9. 2009, 22:44:30
Snažil jsem se něco najít, ale moc jsem z toho nepobral...takže otázka:
Jak jednoduše napsat regulární výraz, který bude brát v potaz českou diakritiku (UTF-8)? Příklad: Chci zkontrolovat název města, tedy jednoduše ^[A-z]{2,50}$ Správně vyhodnotí řetězce jako Ceske Budejovice, Plzen a pod. Nicméně České Budějovice nebo Plzeň to již nevezme. Existuje způsob, jak přinutit preg_match aby zahrnul do a-z také české znaky jako ěščřžýáíé ? (nechci je všechny jmenovat ve výrazu, to mi přijde jako harakiri pro psaní a navíc to bude děsně nepřehledný) Díky, F. |
||
Majkl578 Profil |
#2 · Zasláno: 10. 9. 2009, 00:11:03
Filip111
jinak nez vypsanim jednotlivych znaku to asi nepujde ;) |
||
Filip111 Profil |
#3 · Zasláno: 10. 9. 2009, 07:34:19
To mi radši ani neříkej :)
Ještě někdo prosím...četl jsem, že při nastavení korektních locales by měli automaticky české znaky (ěščřžýáíé) automaticky spadnout do a-z. Nenašel jsem ale nic bližšího ani mi to nefunguje. |
||
Majkl578 Profil |
#4 · Zasláno: 10. 9. 2009, 10:23:28
Filip111
no to pochybuji, alespon me to na linuxu nefunguje: <?php setlocale(LC_ALL, 'cs_CZ.UTF-8'); $foo = 'wdefrčetghberwšwěščřž'; echo preg_match('~^[a-z]+$~i', $foo) ? 'match' : 'nothing'; |
||
Filip111 Profil |
#5 · Zasláno: 10. 9. 2009, 11:20:17
tedy jestli dobře rozumim,
všichni skutečně v regulárních výrazech používate u znaků kromě A-z ještě kompletní výčet ěščřžýáíéĚŠČŘŽÝÁÍÉ Ano? (potvrďte ještě někdo...) Díky |
||
Joker Profil |
#6 · Zasláno: 10. 9. 2009, 11:33:30
Filip111:
> všichni skutečně v regulárních výrazech používate u znaků kromě A-z ještě kompletní výčet ěščřžýáíéĚŠČŘŽÝÁÍÉ > Ano? (potvrďte ještě někdo...) Ano. |
||
Chamurappi Profil |
#7 · Zasláno: 10. 9. 2009, 11:37:52
Reaguji na Filipa111:
Ano. (I když v PHP nedělám.) Používám „áäéëěíóöôúůüýčďňřšťžĺľ“. |
||
tiso Profil |
#8 · Zasláno: 10. 9. 2009, 11:41:14
Chamurappi: zabudol si na slovenské ŕ (vŕba)
|
||
Filip111 Profil |
#9 · Zasláno: 10. 9. 2009, 12:42:16
díky za vyjádření...každopádně to bude děs,
ani nechci vidět jednoduchý výrazy, kde bude namísto :alpha: nebo A-z dalších 5 cm znaků a co teprve ty složitější... |
||
Majkl578 Profil |
#10 · Zasláno: 10. 9. 2009, 14:07:33
Filip111
nemyslim si, stacila by jedna konstanta s vypisem danych znaku (idealne objektove resene) :) |
||
Kajman_ Profil * |
A to ještě v některých programovacích jazycích může být problém v tom, že některé ty znaky jsou utf8 více bytové a někdy je v takových případech nutné napsat regulár jako
(á|ä|é|...) místo jednoduchého [áäé...] V php je pro utf8 nachystaná funkce mb_ereg_match - tam by [áäé...] mělo fungovat. |
||
Filip111 Profil |
#12 · Zasláno: 10. 9. 2009, 14:46:31
Majkl578
napsal jsem si vlastní validátor takováho malého crm systému, kde by měla validace formuláře probíhat automaticky, pokud je validační kritérium pro daný modul/formulář/pole v databázi...tzn. všechny validační kritéria jsou v databázi - tam proměnou nedostanu anebo bych to musel ještě parsovat při načtení z DB a zaměňovat nějaký symboly za výčet jiných znaků. To se mi určitě nechce. teď jsem googlil a preg_match by to možná mohl umět pokud je předán parametr u /[a-z]+/u podpora UTF8 (nicméně musí být PCRE zkompilováno s podporou UTF8, což nemusí být automaticky) mb_ereg by pak měl při správně nastavených locales skutečně do množiny [:alpha:] |
||
Majkl578 Profil |
#13 · Zasláno: 10. 9. 2009, 19:08:20
Kajman_
nejsou nahodou i mb_ereg* deprecated? :) stacil by pridat ten modifikator u do preg_* |
||
Časová prodleva: 15 let
|
0