Avatar billede supermand69 Nybegynder
16. januar 2005 - 20:08 Der er 12 kommentarer og
1 løsning

reg exp

Jeg har en funktion som skal lave smilies i noget tekst. Men min reg exp tager ikke mellemrum eller linjeskift med som er bagved min smilie - kun det som er foran?!

$trans_arr = array('/(^| ):\-?\)/im' => "\\1<span style=\"height:13px; width:13px; background:url('gfx/smiley.smile.png')\"></span>");
$str = preg_replace(array_keys($trans_arr), array_values($trans_arr), $str);
Avatar billede knudx Nybegynder
16. januar 2005 - 23:46 #1
(^| ):\-?\) betyder "{linistart ELLER mellemrum} derpå {:) ELLER :-)}" , ikke noget med mellemrum eller linieskift bagefter.
Prøv (^| ):-?\)( |$)
Avatar billede supermand69 Nybegynder
17. januar 2005 - 20:50 #2
'/(^| ):\-?\)( |$)/im' => "\\1<span style=\"height:13px; width:13px; background:url('gfx/smiley.smile.png')\"></span>\\2",

det ser ud til at virke nu... hvis altså jeg i stedet for at lave en span laver et img tag :) hvordan kan jeg smide &nbsp; ind hvis der forekommer et mellemrum? :)
Avatar billede supermand69 Nybegynder
18. januar 2005 - 18:47 #3
eller hvordan kan man smide &nbsp; ind både for og bag hvis der forekommer et mellemrum? :)
Avatar billede martor Nybegynder
20. januar 2005 - 02:00 #4
hvordan er din smiley gemt? Er det f.eks. en :) i en streng (ex: $str = "Jeg er glad i dag :)";), så er det temmelig nemt at bruge en str_replace i stedet for at lave en reg. exp., og den har ingen problemer med mellemrum.

Bare en tanke...
Avatar billede supermand69 Nybegynder
20. januar 2005 - 21:13 #5
jeg vil egentlig gerne have det til at virke så at mellemrum før og efter min smiley bliver udskiftet med &nbsp;

nogen som kan hjælpe? :)
Avatar billede martor Nybegynder
20. januar 2005 - 21:51 #6
Hvad med den her:

$entry = str_replace(":)","&nbsp\;<IMG SRC=\"smile.gif\">&nbsp\;",$entry);

Den tager godt nok ikke højde for om der er mellemrum eller ej, men den burde sætte &nbsp; før og efter din smiley.

Håber det kan hjælpe lidt...
Avatar billede supermand69 Nybegynder
20. januar 2005 - 22:19 #7
vil helst have det lavet i en reg exp for at få det bedste resultat :)
Avatar billede martor Nybegynder
20. januar 2005 - 23:17 #8
"Hvis du ikke skal bruge smarte erstatningsregler (som regulære udtryk), bør du altid bruge denne funktion i stedet for ereg_replace() eller preg_replace()."

taget fra http://dk.php.net/manual/da/function.str-replace.php

Ikke at det gør at du skal bruge den... vil bare lige sige det! :)
Avatar billede supermand69 Nybegynder
22. januar 2005 - 17:08 #9
Hvis jeg nøjes med at bruge str_replace() bliver mine smilies ikke lavet rigtigt :(

Der skal f.eks. være en &nbsp; efter min span, da et almindeligt mellemrum ikke vil komme til syne. Jeg kan jo ikke lave en str_replace(':) ', '<span></span>&nbsp;', $str) da det jo ikke er sikkert der er et mellemrum efter
Avatar billede martor Nybegynder
22. januar 2005 - 23:04 #10
hmmmm, det kan godt være jeg ikke er helt med på hvad det præcis er du ønsker, mht. det mellemrum. Hvad sker der hvis du laver den her?
str_replace(':)', '<span></span>&nbsp;', $str) - altså uden mellemrum efter smiley!

Er problemet så, at der måske er et mellemrum for meget?
Avatar billede supermand69 Nybegynder
22. januar 2005 - 23:09 #11
hvis du laver den sådan kommer der to mellemrum efter min span, hvis altså der i forvejen er et mellemrum... ser ikke fedt ud
Avatar billede martor Nybegynder
22. januar 2005 - 23:59 #12
ok! Så er der den dovne løsning:
Smid en if uden om "str_replace med mellemrum", else "str_replace uden mellemrum".
(ved ikke om det vil virke ordentligt)...

Ellers skal du nok ud i noget reg.exp. (som du er inde på ;) )
Avatar billede supermand69 Nybegynder
29. januar 2005 - 11:03 #13
lukker
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