Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Regex - text (ne)obsahující nové řádky

Aktivity
Avatar
Jan Lupčík
Tvůrce
Avatar
Jan Lupčík:27.6.2015 17:58

Zdravím zdejší komunitu,
zrovna řeším takovou blbůstku a nedokážu se s ní hnout. Pomůžete mi, prosím?

Mám nějaký text od uživatele. A v něm potřebuji nahradit <script>cokoliv od uživatele</script> za nějaký text. Jenže jsem se sekl v tom, aby to fungovalo. Samozřejmě se jedná o zamezení útoku a napadly mě tři varianty.

Varianta 1.:
<script>kód</script>

Varianta 2.:
<script>kód

Varianta 3.:
<script>

kód

</script>

Těch variant může být daleko víc. Mně jde o to, aby se nahradilo vše, co je v <script> nějakým textem (ten tag nemusí být uzavřen). A taky aby nezáleželo na počtu nových řádků - aby se to tedy nahradilo v případě, kdy tam není žádný nový řádek a také v případě kdy jich tam je milion. Můj momentální Regex kód je tento:

/<script(.*?)>(.*?\n.*?)+(?!<\/script>)/

Bohužel ten nahrazuje při novém řádku všechno a při prázdném nic.

Předem děkuji za pomoc od všech. :)

Odpovědět
27.6.2015 17:58
TruckersMP vývojář
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Jan Lupčík
Patrik Smělý:28.6.2015 10:08

Ahoj zkus toto nevím jestli ti to nějak pomůže ale takle to řeším já s code bbkódem.

$text = str_replace("\r\n","", preg_replace (
    "/\[script\](.*?)\[\/script\]/ism",
    "<script>Text</script>",
    nl2br($text)
));
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
28.6.2015 10:08
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Patrik Smělý
Jan Lupčík:28.6.2015 10:31

Velice dobré, ale nesplňuje to 2. variantu ... a ačkoliv se snažím jakkoliv, vždy se nahradí ten tag, ale vnitřek zůstane :D
Budu zkoušet dál (a Googlit hlavně), snad na něco přijdu.

Nahoru Odpovědět
28.6.2015 10:31
TruckersMP vývojář
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Patrik Smělý
Jan Lupčík:28.6.2015 11:07

Tak moc děkuji. :) To /ism na konci pomohlo. Kompletní momentální Regex, který vše splňuje, je takový:

/<script(.*?)>(.*)(?!<\/script>)/ismU
Nahoru Odpovědět
28.6.2015 11:07
TruckersMP vývojář
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.