Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Prosba o úpravu regulárního výrazu

Dobrý den,

jako součást ochrany před útoky proti databázi používám mimo jiné také tento regulární výraz:

$poznamky = preg_replace("/[^A-Za-z0-9 ]/", '_', $poznamky);

jehož smyslem je nahradit v řetězci $poznamky všechny nealfanumerické znaky kromě mezer spodním podtržítkem.

Co potřebuji, je VYNECHAT z nahrazování kromě mezer ještě další znaky, a to tečku, čárku a lomítko.

Můj dotaz zní, jak to udělám?

Sice laicky bych si myslel, že to tam stačí dopsat do těch hranatých závorek za mezeru před uzavření hranatých závorek, ale nevím, jestli něco z těch znaků nejsou nějaké speciální a vůbec regulárním výrazům nerozumím, tak bych to nerad zkazil a raději poprosím o radu chytřejší.

Předem díky za rady.

Předmět Autor Datum
Tečka a čárka nemajú v hranatých zátvorkách žiaden špeciálny význam, takže ich netreba escapovať spä…
los 06.09.2012 13:00
los
Děkuju za odpověď. Tak jsem to teda opravil na takhle: $poznamky = preg_replace("/[^A-Za-z0-9 .,\/]…
Ladislav_Malek 06.09.2012 13:38
Ladislav_Malek
Naco tam mas tie lomitka? to ti bude nahradzovat len stringy v lomitkach. Dobre si je trochu o tom p…
MM.. 06.09.2012 15:26
MM..
jaj lomitka tam nechaj. Mas to ok
MM.. 06.09.2012 15:31
MM..
Dobre si je trochu o tom precitat
Ladislav_Malek 06.09.2012 15:35
Ladislav_Malek
ja to mam precitane velmi dobre :) Lomitka nie su sucast vyrazu.
MM.. 06.09.2012 15:37
MM..
los este pisal ze ten backshlash treba 2x, ptz v PHP stringu ma \ specialny vyznam a vytvori to spec… poslední
MM.. 06.09.2012 15:51
MM..

Tečka a čárka nemajú v hranatých zátvorkách žiaden špeciálny význam, takže ich netreba escapovať spätným lomítkom. Bude to fungovať, aj keď ich oescapuješ.

Lomítko si použil ako oddeľovač, takže ho treba escapovať spätným lomítkom. Odporúčam zmeniť dvojité úvodzovky na jednoduché, lebo v dvojitých úvodzovkách by si potreboval spätné lomítko escapovať ešte raz.

Děkuju za odpověď. Tak jsem to teda opravil na takhle:

$poznamky = preg_replace("/[^A-Za-z0-9 .,\/]/", '_', $poznamky);

Akorát to dělám stylem cvičená opice, vůbec nechápu, o co tam jde :-)

Finální dotaz zní, jestli je to takto OK, anebo jestli se to dá prolomit zase nějakou jinou vychytralou sekvencí znaků, třeba \/\Q\/Q/kill_reg\\ (to je vtip, ale dotaz je myšlen vážně)?

Pokud je to špatně, tak prosím o opravu, děkuji.

los este pisal ze ten backshlash treba 2x, ptz v PHP stringu ma \ specialny vyznam a vytvori to specialny character, prerob to radsej na ' ' string

$poznamky = preg_replace('/[^A-Za-z0-9 .,\/]/', '_', $poznamky);

alebo

$poznamky = preg_replace("/[^A-Za-z0-9 .,\\/]/", '_', $poznamky);

toto neni o vyrazoch ale o syntaxci samotneho PHP. V kazdom pripade to treba otestovat s nejakym stringom ktory obsahuje znak /

P.S. podla mna treba ale \ dvakrat aj v ' ' stringu ale neviem zhlavy, los vie lepsie presnu syntax PHP takze mu mozes verit :)

Zpět do poradny Odpovědět na původní otázku Nahoru