Autor Zpráva
Filip111
Profil
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
Filip111
jinak nez vypsanim jednotlivych znaku to asi nepujde ;)
Filip111
Profil
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
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
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
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
Reaguji na Filipa111:
Ano. (I když v PHP nedělám.)
Používám „áäéëěíóöôúůüýčďňřšťžĺľ“.
tiso
Profil
Chamurappi: zabudol si na slovenské ŕ (vŕba)
Filip111
Profil
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
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
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:]
přibrat i znaky ěščřžýáíé. Zatím jsem v práci jen něco hledal, musím zítra doma vyzkoušet co to udělá v praxi.
Majkl578
Profil
Kajman_
nejsou nahodou i mb_ereg* deprecated? :) stacil by pridat ten modifikator u do preg_*

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: