preg_replace alle nicht buchstaben und nicht zahlen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ahnung
anfang
berauschenden wirkung
bindestrich
buchstabe
code
ende
form
glauben
idee
leute
negation
ode
sagen
string
text
tun
wein
zahl
zeichen
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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?? -
Ungetestet:
echo preg_replace('~\W~uim',' ',$_GET['var1']);
Ersetzt alle Nicht-Buchstaben und Nicht-Zahlen, allerdings auch Withspace wie Leerzeichen und Zeilenumbrüche. -
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... -
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... -
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
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 -
@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 ;) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage