Gå til innhold

reg.exp.: Endre {constant} til defined constant


Anbefalte innlegg

Skrevet

DEFINE('NAME','Thomas');

 

$text = "Denne gutten heter {NAME}. Han er 12 år.";

 

Beklager at jeg ikke kan komme med noe godt forslag selv, for dette er vrient. Resultatet jeg er ute etter er selvfølgelig at $text = "Denne gutten heter Thomas ...osv";

MEN det er ikke aktuelt å bruke vanlige variabler eller "...heter ".NAME.". Han er...". Jeg vil at det skal gjøres via regular expression, etter som $text er en input fra bruker :-)

Videoannonse
Annonse
Skrevet

Er ikke noe problem å finne ut hvilken funksjon jeg skal bruke :-) str_replace er har problemer med regexp, bruker ereg_replace el preg_replace til det. Problemet er hva jeg skal putte inni funksjonen.

Skrevet (endret)

Prøv

 

$text = preg_replace("/\{NAME\}/", NAME, $text);

 

Men det er ingen vits å bruke regexp hvis man kan klare seg uten.

 

Edit: Glemte et par slasher

Endret av balletryne
Skrevet

Men har jeg lyst til å bruke regexp - fordi jeg aldri vet hvilke constants som eksisterer, derfor vil det alltid være variabelt hva brukeren skriver inn mellom brackets'ene :-)

Skrevet (endret)

Altså noe slikt som

 

$text = preg_replace("/\{(.*?)\}/", $1, $text);

 

Mulig du må bruke eval inni der slik at det blir ..., eval($1), ... eller ..., eval("$1"), ...

 

Edit: Jeg ville kanskje satset på den siste. Prøv

Endret av balletryne
Skrevet (endret)

Det er en sikkerhetsrisiko med det scriptet. Med et slikt script gir du brukeren mulighet til å fritt kjøre selvvalgt kode.

 

Tror du burde bytte ut regexp-et med

 

"/\{[A-Z]*?\}/"

 

Dermed begrenser du inputen til _kun_ store bokstaver, ingen andre tegn. Hvis du har mulighet til å sjekke inputen mot en forhåndsdefinert liste over lovlig input er det å foretrekke.

 

Edit: Krøkkete formulering

Endret av balletryne
Skrevet (endret)

Antar at kun store bokstaver som angir en defined variabel burde kunne holde. Det kommer litt an på hva som er definert. Finnes mye definert i php-biblioteket.

 

Edit: Stavefeil. Jeg vet ikke om jeg selv ville stolt på at det holder. Det kommer litt an på hvordan nettsiden og koden er designet. Noen andre som har en formening?

Endret av balletryne

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...