Avatar billede lakana Nybegynder
04. juli 2008 - 12:14 Der er 7 kommentarer og
1 løsning

Preg_replace, der først kalder en funktion

Hvordan laver jeg en funktion, der tjekker efter ord som "[[test]]", og så skal den kalde en funktion, og hvis den funktioner returnerer true, så skal den lave ordet om. (ligesom wikipedias interne linkfunktion)
Avatar billede lakana Nybegynder
04. juli 2008 - 12:17 #1
eller faktisk skal den også returnere et ID.

Så teksten: "Dette er en [[test]]", så vil jeg på ordet "test" kalde en funktion, der tjekker om siden eksisterer og returnerer ID, og så skal den lave det om til et link, der gør brug af det ID.
Så en funktion, skal altså bruge navnet som parameter, og returnere et tal, og hvis det er et tal og ikke "false", så skal den lave ordet om til et link, og ellers skal den bare lave ordet om, så den fjerner "[[" og "]]".
Jeg håber det er forståligt :D
Avatar billede nielle Nybegynder
04. juli 2008 - 13:07 #2
Prøv med preg_replace_callback():

http://dk2.php.net/preg_replace_callback
Avatar billede lakana Nybegynder
04. juli 2008 - 13:11 #3
Men jeg ved ikke hvordan jeg skal bruge funktionen.
Avatar billede coderdk Praktikant
06. juli 2008 - 12:31 #4
eller:

$din_text = preg_replace( "/\[\[(.*?)\]\]/e", 'din_funktion("\\1")', $din_text );

Den kalder din_funktion med "test" som parameter ved [[test]]...
Avatar billede lakana Nybegynder
06. juli 2008 - 18:47 #5
coderdk - kan jeg få den til at kalde en metode i en klasse istedet for en funktion?

men kan det ikke lade sig gøre at udføre arbejdet i min preg_replace(), og så bare have en metode der hedder "tjekEksistens()" der returnerer true/false?
Avatar billede coderdk Praktikant
06. juli 2008 - 19:19 #6
Hmm du kan ikke bruge $this, da den bliver kaldt i sit eget environment, men hvis du bruger en statisk metode kan du måske bare skrive:

$din_text = preg_replace( "/\[\[(.*?)\]\]/e", 'DinKlasse::din_funktion("\\1")', $din_text );

Ellers skal du bruge preg_replace_callback, som tager et array i stedet for en streng...
Avatar billede lakana Nybegynder
07. august 2011 - 20:38 #7
mange tak. smid et svar coderdk
Avatar billede coderdk Praktikant
07. august 2011 - 21:22 #8
Aight :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester