PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : unerlaubte zeichen in variable rausfiltern


logen
17.06.2006, 12:55:18
Hi,

ich habe hier schon eine ähnliche Frage gefunden, leider nicht mit den gewünschten Antworten. :)

Also: Ich habe eine beliebige Zeichenkette $z1 und eine Zeichenkette $z2 mit definierten zeichen. Nun möchte ich gerne, dass alle Zeichen in $z1 löschen, die nicht in $z2 stehen.
Ich hab es soweit, dass ich herausfinden kann ob Zeichen in $z1 sind die nicht in $z2 enthalten sind, aber wie bekomme ich die weg?

$z1 = "Ich bin ein Test mit Sonderzeichen, nach §1234!";
$z2 = '/^[a-z0-9\ä\ö\ü\_\.\+\-\@]+$/';
if (!preg_match($z2, $z1)){
echo "fehler";
}
Der Code meldet mir nun, dass in $z1 ein Zeichen (das "!") ist, dass nicht in $z2 definiert ist. Aber wie bekomme ich das raus? Ich weiss ja nun, dass es das "!" aber kann ich mir das ausgeben lassen, oder gleich aus $z1 löschen?

Ich möchte als, dass $z1 nach dem durchlauf nurnoch folgendes enthält "Ich bin ein Test mit Sonderzeichen, nach 1234".

Serp
17.06.2006, 15:49:21
Folgendes müsste funktionieren:

$z1 = "Ich bin ein Test mit Sonderzeichen, nach §1234!";
$z2 = '/[a-z0-9\ä\ö\ü\_\.\+\-\@]+/i';
preg_match_all($z1, $z2, $treffer);
$zi = implode('', $treffer[0]);

Habs allerdings nicht ausprobiert, bin mir also nicht 100%ig sicher.

logen
17.06.2006, 20:26:23
fast. :)

du hattest die Variablen vertauscht, aber ansonsten funktioniert das super.
danke. hier der berichtigte code:
$z1 = "Ich bin ein Test mit Sonderzeichen, nach §1234!";
$z2 = '/[a-z0-9\ä\ö\ü\_\ \.\+\-\@]+/i';
preg_match_all($z2, $z1, $treffer);
$zi = implode('', $treffer[0]);