String mit preg_replace() säubern.

visiondpc

Erfahrenes Mitglied
Hallo, ich habe mich schon ein wenig in die regulären Ausdrücke eingelesen, aber bisher keine Lösung für dieses vermutlich einfache Problem gefunden.
Ich muss alle Zeichen aus einem String, die nicht a-Z oder 0-9 sind durch einen Unterstrich ersetzen.
Wie ich alle Zeichen a-Z und 0-9 finde hab ich schon raus. Aber wie kann ich das jetzt negieren?
Ich hatte das so versucht. Klappt ber leider nicht.
PHP:
$cleanstr = preg_replace("/[^(a-z0-9)]/i", "_", $str2clean);
 
Zuletzt bearbeitet:
Danke. Mittlerweile funktioniert es seltsamerweise auch mit meinem Weg. Keine Ahnung warum das vorher nicht ging. Ich musste den Ausdruck allerdings noch erweitern, weil Klammern nicht herausgefiltert wurden.

PHP:
$cleanstr = preg_replace("/[^(a-z0-9)]|\(|\)/i", "_", $str2clean);

Trotzdem danke für die Hilfe.
 
rt es seltsamerweise auch mit meinem Weg. Keine Ahnung warum das vorher nicht ging. Ich musste den Ausdruck allerdings noch erweitern, weil Klammern nicht herausgefiltert wurden.

Das liegt daran, dass du sie in deinen Zeichenbereich ([^(a-z0-9)]) hineingepackt hast, aber da gehören sie nicht rein, schau dir mal die Lösung von campari an, diese ist korrekt, wobei eine Lösung mit dem case-insensitive modifier geschickter gewesen wäre:

PHP:
$cleanstr = preg_replace("/[^a-z0-9]/i", "_", $str2clean);
 
Hi,

Super Thread, hat mir echt weitergeholfen. Noch eine Frage dazu: Ich möchte zusätzlich noch, dass auch Bindestriche (-) NICHT entfernt werden (neben a-z und 0-9). Komme aber leider auf keinen grünen Zweig.

Habe schon mehrere Kombinantionen versucht, bekomme es aber einfach nicht hin.
Hat vielleicht jemand einen Tipp für mich?

Danke & Ciao,
Mike
 
PHP:
$cleanstr = preg_replace("/[^a-z0-9-]/i", "_", $str2clean);
würde ich vermuten. Ich habe dazu auch eine ganz gute Seite gefunden vieleicht hilft die Dir weiter.
Link
 
Zurück