kostenloser Webspace werbefrei: lima-city


preg_replace alle nicht buchstaben und nicht zahlen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    goldeneye

    Kostenloser Webspace von goldeneye

    goldeneye hat kostenlosen Webspace.

    Hey Leute.
    Hänge grade bei einem simplen pattern für PHP preg_replace function.
    Ich würde gerne alle Zwichen außer: Buchaben (also a-zA-Z) und alle Zahlen (also 0-9) sowie bindestriche entfernen.

    habe bisher versucht wie folgt:

    <?php
    
        $var_one = "32#4fds f'54 +#45w <d< xyc43'$%";
        $var_one = preg_replace("![^A-Za-z0-9-]!", "", $_GET['var1']); 
                      
        echo $var_one;   
    
    
    ?>


    Was aber leider echt nicht den gewünschten effekt bringt.

    Könte mit jemand sagen, was ich ich an dem Pattern ![^A-Za-z0-9-]! sthehen lassen ode verändern muss, um das oben beschriebene ergebniss zu bekommen?

    Freue mich über hilfreiche Antworten
    Daniel
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. das ^ signalisiert ein zeichen am anfang eines strings, also sollte das schonmal weg... und in die klapper gehört es achonmal gar nciht....


    und geghört zu einer regex nciht / am anfang nd am ende des textes?
  4. Autor dieses Themas

    goldeneye

    Kostenloser Webspace von goldeneye

    goldeneye hat kostenlosen Webspace.

    sebulon schrieb:
    das ^ signalisiert ein zeichen am anfang eines strings, also sollte das schonmal weg... und in die klapper gehört es achonmal gar nciht....


    und geghört zu einer regex nciht / am anfang nd am ende des textes?



    habe mich bisher noch nie so umfassend mit regex herumgeschlagen. Wie würdest du den diesen Pattern schreiben??
  5. Ungetestet:
    echo preg_replace('~\W~uim',' ',$_GET['var1']);

    Ersetzt alle Nicht-Buchstaben und Nicht-Zahlen, allerdings auch Withspace wie Leerzeichen und Zeilenumbrüche.
  6. hm, ich würde es so schreiben:

    /![a-zA-Z0-1]/


    aber ich unterliege gerade der berauschenden wirkung des weines, vielleicht ist das nicht ganz so optimal die lösung...
  7. Autor dieses Themas

    goldeneye

    Kostenloser Webspace von goldeneye

    goldeneye hat kostenlosen Webspace.

    tct schrieb:
    Ungetestet:
    echo preg_replace('~\W~uim',' ',$_GET['var1']);

    Ersetzt alle Nicht-Buchstaben und Nicht-Zahlen, allerdings auch Withspace wie Leerzeichen und Zeilenumbrüche.

    Wie bekomme ich da jetzt noch bindestriche rein?
    Habe diese form von regex bisher noch nicht gesehen und habe deshalb garkeine ahnung, wie man das veränder kann...
  8. goldeneye schrieb:
    Wie bekomme ich da jetzt noch bindestriche rein?
    Habe diese form von regex bisher noch nicht gesehen und habe deshalb garkeine ahnung, wie man das veränder kann...

    Dann musst du den RegEx negieren und noch den Bindestrich einfügen :wink:

    Negieren geht mit ^ innerhalb einer eckigen Klammer, allerdings passt \W, was normalerweise "alle nicht-wort-zeichen" bedeutet, dann natürlich nun auf alle Wortzeichen. Deswegen musst du \w verwenden. Kurz:
    echo preg_replace('~[^\w-]~uim', '',$_GET['var1']);

    Es kann sein, dass vor den Bindestrich noch ein \ muss.

    edit
    Anmerkung von nikic geändert.

    Beitrag zuletzt geändert: 18.10.2010 15:05:54 von tct
  9. @sebulon: Weißt du, manchmal ist es wirklich besser einfach nichts zu sagen...

    @topic: Dein regulärer Ausdruck sieht eigentlich richtig aus. Ich hätte aber das '-' an den Anfang gezogen, da es innerhalb der eckigen Klammern ja eine Sonderbedeutung hat ;) Zudem ist ! als Delimiter vielleicht unglücklich gewählt, da einige Leute (wie sebulon) auf die Idee kommen könnten, dass es irgendetwas mit Negation zu tun hat. Aber das eigentlich Problem ist glaube ich ein viel einfacheres: Du hast da glaube ich $var_one und $_GET['var1'] verwechselt...

    Also:
    <?php
        $var_one = "32#4fds f'54 +#45w <d< xyc43'$%";
        $var_one = preg_replace('#[^-A-Za-z0-9]#', '', $var_one); 
                      
        echo $var_one;


    @tct: Du hast die Modifier versehentlich in den Regex reingeschrieben, nicht hinter den Delimiter. Aber ansonsten ist dein Regex der beste ;)
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!