preg_replace()
compuboy1010
- php
Guten Tag,
Aus einem Produktnamen der wie folgt aussehen könnte:
nutella-ferrero<sup>®</sup> neu sollen die Leerzeichen, Bindestriche, html tags und html entities entfernt werden.
Also praktisch folgendes übrig bleiben: nutellaferreroneu
Aber nach meiner preg_replace() Funktion bleibt nix über! Was mache ich falsch ?
while($row = $this->db->fetch_array())
{
$productname = preg_replace('#®|[^a-z0-9] #', '', strip_tags($row['d_produktnamehtml']));
$filetest = $filepath."/".$type."/".$productname.".pdf";
if (file_exists($filetest))
{
$row['filesize'] = sprintf("%01.2f", (filesize($filetest) / 1000));
$downloads[] = $row;
}
}
$this->assignVars('downloads', $downloads);
$this->assignVars('filepath', $filepath);
Danke
Wenn Du möchtest, dass immer nur 1 Buchstabe vergleichen wird, dann solltest Du das auch mit angeben, weil sich der ganze Ausdruck sonst gierig verhält und alles aufnimmt und du solltest case-insensitive suchen:
#(®|[^a-z0-9]| ).?#i
Hoffe das hilft,
Gruss Stefan
Hallo,
#(®|[^a-z0-9]| ).?#i
Hilft nicht wirklich. Wo ist in dem Ausdruck die Anweisung, dass Bindestriche und Leerzeichen rausgefiltert werden sollen?
Warum bekomme ich immer einen leeren String am Ende.
Heißt "^a-z0-9", dass a-z und 0-9 drin bleiben sollen oder dass die durch "" ersetzt werden ?
Blicke nicht durch. :-(
Danke
#(®|[^a-z0-9]).?#i
das ist aufgeteilt:
| bedeutet ein Logisches ODER
dh. die Eintrage $reg; und [^a-z0-9] werden einzeln betrachtet... eines der beiden muss erfüllt sein, sonst wird der eintrag ersetzt... das .? bedeutet, dass es sich max. um 1 Zeichen handeln darf. Nimm bitte das "| " raus, ich glaub das war falsch...
Gruss
Stefan
Hallo Stefan,
preg_replace('#®|[^a-z0-9]#','',strip_tags($row['d_produktnamehtml']));
Diese Zeile funktioniert. Das Problem lag woanders im Code.
Danke für deine Erklärung. Warum funzt obiges ?
Heißt obiges nicht:
Suche nach "®" oder den Buchstaben a bis z oder Ziffern 0-9 und ersetze jedes Vorkommen durch "", also durch nichts ?
Warum werden dennoch (wie gewollt) Bindestriche und Leerteichen entfernt ? Wo kommt das in obiger Funktion vor?
Danke
Suche nach "®" oder den Buchstaben a bis z oder Ziffern 0-9 und ersetze jedes Vorkommen durch "", also durch nichts ?
Warum werden dennoch (wie gewollt) Bindestriche und Leerteichen entfernt ? Wo kommt das in obiger Funktion vor?
Ne das obige heißt: Ersetze jedes Zeichen das nicht (^) zwischen a-z oder 0-9 ist durch "" das ® hat sogesehen KEINEN Einfluss *g*
Willst du, dass das ® Zeichen drin vorkommen darf musst Du es umbauen... :o)
Gruss
Stefan
Hallo,
Ne das obige heißt: Ersetze jedes Zeichen das nicht (^) zwischen a-z oder 0-9 ist durch "" das ® hat sogesehen KEINEN Einfluss *g*
Aha, jetzt wird einiges deutlicher.
Leider gibt es keine wirklich guten Tutorials zu preg_replace().
Die Beschreibung auf der php.net Seite kann man vergessen.
Willst du, dass das ® Zeichen drin vorkommen darf musst Du es umbauen... :o)
Nein, es darf nicht drin vorkommen. Ist schon richtig so.
Danke für die Hilfe. Alles Gute!
Compu
Aha, jetzt wird einiges deutlicher.
Leider gibt es keine wirklich guten Tutorials zu preg_replace().
Die Beschreibung auf der php.net Seite kann man vergessen.
Schau mal unter:
http://www.php.net/manual/de/pcre.pattern.modifiers.php
http://www.php.net/manual/de/pcre.pattern.syntax.php
Mehr Infos hatte ich auch nie :-(
Dauert leider etwas bis mal die Logik, sofern es eine gibt, versteht.
Manchmal machen die Dinger aber dennoch alles mögliche außer dem was sie sollen *g*
Auf Anhieb ist es immer schwer einen perfekten Reg-Ex zu treffen ... da kann ich Dich beruhigen. Es gilt: Übung macht den Meister :-)
you're welcome,
Gruss Stefan