Apostroph in Regulären Audrücken

Dj Mike

Mitglied
Hallo,
ich habe folgendes Problem:
Ich überprüfe Formulardaten, die mittels POST an PHP übergeben werden, mit
Code:
preg_match()
Nur leider funktioniert es bei mir nicht, wenn ich in der zu überprüfenden Variable einen Apostroph habe (z.B. John's), der soll aber auch erlaubt sein, da ich den Namen überprüfe und es wohl auch Namen gibt, die einen Apostroph enthalten.
Mein Code sieht folgendermaßen aus:
Code:
preg_match("/^[a-zäöüÄÖÜ\.\-\`\´\']{3,}$/i",$variable)
Wo liegt hier das Problem?
Gruß,
Micha
 
PHP:
preg_match("/^[a-zäöüÄÖÜ\.\-\`\´\']{3,}$/i",mysql_escape_string($variable))
oder
PHP:
preg_match("/^[a-zäöüÄÖÜ\.\-\`\´\']{3,}$/i",str_replace("'","\'",$variable))

sowas in der richtung sollte weiter helfen...
 
Hallo,

Dj Mike hat gesagt.:
Mein Code sieht folgendermaßen aus:
Code:
preg_match("/^[a-zäöüÄÖÜ\.\-\`\´\']{3,}$/i",$variable)
Wo liegt hier das Problem?
Bis auf die überflüssigen Backslashes vor ., `, ´ und ' (welche aber auch nicht schaden sollten) und einem fehlenden ß ist an dieser Codezeile allein alles ok. Ich vermute allerdings, dass die Formulardaten dank der Einstellung magic_quotes_gpc bereits mit Backslashes vor allen ' (und ") reinkommen.

Abhilfe schafft hier entweder das Ausschalten dieser Direktive in der php.ini oder folgender Codeschnipsel:
PHP:
<?php

if (get_magic_quotes_gpc()) {
	stripslashes_array($_REQUEST);
	stripslashes_array($_GET);
	stripslashes_array($_POST);
	stripslashes_array($_COOKIE);
}	

function stripslashes_array(&$array) {
	if (!is_array($array)) return;

	foreach ($array as $key => $value) {
		if (is_string($value)) {
			$array[$key] = stripslashes($value);
		} elseif (is_array($value)) {
			stripslashes_array($array[$key]);
		}
	}
}

?>

Grüße,
Matthias
 
In der php.ini ist folgendes eingestellt:
magic_quotes_gpc: Local Value=Off; Master Value=On
Heißt das denn nicht, dass es bei mir (Local Value) deaktiviert ist?
Welche Zeichen muss man denn escapen?
Gruß,
Micha
 
Zuletzt bearbeitet:
Maskiert werden müssen eigentlich nur die Zeichen, die bei regulären Ausdrücken eine besondere Bedeutung haben jedoch als Zeichen selbst gewertet werden sollen (so etwa ., [, ], etc.) sowie die Begrenzer. In deinem Fall würde also Folgendes reichen:
Code:
/^[a-zäöüÄÖÜ.\-`´']{3,}$/i
 
Das Problem ist ganz einfach zu lösen:
Code:
preg_match("/^[a-zäöüÄÖÜß.\-`´']{3,}$/i",$variable)
einfach durch die Funktion stripslashes() erweitern:
Code:
preg_match("/^[a-zäöüÄÖÜß.\-`´']{3,}$/i",stripslashes($variable))
Gruß,
Micha
 
Zurück