Avatar billede supermand69 Nybegynder
23. marts 2005 - 19:42 Der er 17 kommentarer og
1 løsning

preg replace

Jeg har en string som bliver sendt fra et textarea, hvor jeg skal have lavet en preg_replace så der ikke kan forekomme 3 eller flere linjeskift lige efter hinanden

jeg er kommet frem til at det må se således ud:
"/\n{3,}/i" => "\n\n"

- men jeg kan ikke helt få det til at virke? :(
Avatar billede coderdk Praktikant
23. marts 2005 - 20:13 #1
Det kan være at der er carriage return også, prøv med: "/(\r?\n){3,}/" til "\n\n"
Avatar billede supermand69 Nybegynder
23. marts 2005 - 23:47 #2
hvad er forskellen på \r\n og \n?
Avatar billede coderdk Praktikant
23. marts 2005 - 23:48 #3
I windows bruger man \r\n, og i unix bruger man \n - \r er carriage return, og \n er newline...
Avatar billede supermand69 Nybegynder
23. marts 2005 - 23:54 #4
jamen hvad er carriage return? :p

hvordan kan jeg så slette alle \r?\n hvis der f.eks. er en masse af dem uden nogen tekst?

eks.

"asfasdf\nasdfasdf\n\n\n\n\n"
Avatar billede supermand69 Nybegynder
23. marts 2005 - 23:57 #5
$trans_arr = array(
        "/(\s*\r?\n){3,}/i" => "\n\n"
    );
   
    $reply = preg_replace(array_keys($trans_arr), array_values($trans_arr), $msg[0]);
Avatar billede coderdk Praktikant
24. marts 2005 - 01:08 #6
Den klassiske forklaring er at carriage return, sender skrivemaskinehovedet tilbage til begyndelsen af linjen, altså den samme linje. Derfor skulle man også sende en newline, som rykkede papiret lidt op, så man fik en ny linje ;)
Avatar billede coderdk Praktikant
24. marts 2005 - 01:08 #7
Og så vår du lige et svar :)
Avatar billede coderdk Praktikant
24. marts 2005 - 01:08 #8
*får :)
Avatar billede supermand69 Nybegynder
24. marts 2005 - 10:57 #9
griner... hehe

jeg er selv lige kommet frem til noget, men ved ikke lige om det er den helt korrekte måde at gøre det på??

function txt2sql($str)
{
    $trans_arr = array(
        "/(\s*\r?\n){3,}/i" => "\n\n",
        "/^(\s*\r?\n)*/i" => "",
        "/(\s*\r?\n)*$/i" => ""
    );
   
    return preg_replace(array_keys($trans_arr), array_values($trans_arr), trim($str, " \xA0"));
}
Avatar billede supermand69 Nybegynder
24. marts 2005 - 10:59 #10
måske er der noget i mit array som kan reduceres eller optimeres? :)
Avatar billede supermand69 Nybegynder
24. marts 2005 - 11:30 #11
update:

$trans_arr = array(
    "/^$empty*(.*)$empty*$/" => "\\2",
    "/$empty{3,}/" => "\n\n"
);

nogle gange sletter den ikke altid \n i start og slut?
Avatar billede supermand69 Nybegynder
24. marts 2005 - 11:30 #12
hov

$empty = "(\s*\r?\n)";

$trans_arr = array(
    "/^$empty*(.*)$empty*$/" => "\\2",
    "/$empty{3,}/" => "\n\n"
);
Avatar billede coderdk Praktikant
24. marts 2005 - 13:11 #13
Dette burde være nok - trim() fjerner whitespace/newlines etc fra start og slut:

$text = preg_replace( '/(\s*\r?\n){3,}/', '\n\n', trim( $text ) );
Avatar billede supermand69 Nybegynder
24. marts 2005 - 14:13 #14
det er fordi jeg også skal trimme et tegn mere fra at jeg har det ekstra med i trim()

men jeg synes ikke helt at min preg virker? den tager ikke altid overflødige linjeskift i start- og slutningen af min string :(
Avatar billede coderdk Praktikant
24. marts 2005 - 14:15 #15
Jeg er ikke med, trim() fjerner alle disse fra starten og slutningen af en streng:

      " " (ASCII 32 (0x20)), an ordinary space.
      "\t" (ASCII 9 (0x09)), a tab.
      "\n" (ASCII 10 (0x0A)), a new line (line feed).
      "\r" (ASCII 13 (0x0D)), a carriage return.
      "\0" (ASCII 0 (0x00)), the NUL-byte.
      "\x0B" (ASCII 11 (0x0B)), a vertical tab.
Avatar billede supermand69 Nybegynder
24. marts 2005 - 14:20 #16
men ikke ALT+0160

kunne du hjælpe med min preg? :)
Avatar billede coderdk Praktikant
24. marts 2005 - 14:23 #17
Prøv:

$text = preg_replace( '/(\s*\r?\n){3,}/', '\n\n', trim( $text, " \t\n\r\0\x0B\xA0" ) );
Avatar billede supermand69 Nybegynder
24. marts 2005 - 14:34 #18
tak :)
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