RegEx in PHP erkennt é nicht

suntrop

Erfahrenes Mitglied
Hallo,
ich nutze folgende RegEx um einen Namen zu prüfen:
Code:
/^([a-zA-ZäÄöÖüÜß\xc0-\xc2\xc8-\xcf\xd2-\xd4\xd9-\xdb\xe0-\xe2\xe8-\xef\xf2-\xf4\xf9-\xfb\x9f\xff\.\'\-_]?(\s)?)+$/
Jedoch scheint die RegEx in meinem PHP-Skript nicht zu funktionieren, da ich mit folgender Funktion einen „Fehler“ zurückerhalte, wenn ich z.B. ein é in das Wort tippe (é = Hex E9).

PHP:
if (preg_match( $this->muster_name, $eingabe ))
ergibt FALSE

Könnte es daran liegen, dass ich UTF-8 nutze? Habe mal gehört, PHP habe an einigen Stellen damit Schwierigkeiten.
Denn in einer RegEx-Test-Software wird é korrekt erkannt.
EDIT: Ich habe an keiner Stelle Merkwürdigkeiten mit UTF-8 gesehen.
EDIT2: Wenn ich in die RegEx direkt é hinzufüge, dann klappts wunderbar. Das muss also an dieser HEX-Schreibweise liegen.

PHP:
final public function pruefeName( &$eingabe, $label, $min_laenge=999, $max_laenge=999 )
	{
		self::bereinigen( $eingabe );
		self::injection( $eingabe, $label );
		// Mindestlänge prüfen falls gesetzt
		if ($min_laenge != 999)
		{
			if (strlen( $eingabe ) < $min_laenge)
			{
				$this->feld_error[$label] = self::FELD_ERROR_ZUKURZ;
				return false;
			}
		}
		// Maximallänge prüfen falls gesetzt
		if ($max_laenge != 999)
		{
			if (strlen( $eingabe ) > $max_laenge)
			{
				$this->feld_error[$label] = self::FELD_ERROR_ZULANG;
				return false;
			}
		}
		// Auf Suchmuster prüfen
		if (preg_match( $this->muster_name, $eingabe ))
		{
			return $eingabe;
		}
		else
		{
			$this->feld_error[$label] = self::FELD_ERROR_FORMAT;
			return false;
		}
	}
PHP:
final private function bereinigen( &$eingabe )
	{
		if (get_magic_quotes_gpc()) { $eingabe = stripslashes( $eingabe ); }
		$eingabe = trim( $eingabe );
		$eingabe = preg_replace( $this->bereinigen_suchmuster, $this->bereinigen_ersatz, $eingabe );
		$eingabe = wordwrap( $eingabe, 45, " ", true );
		return $eingabe;
	}
PHP:
final private function injection( &$eingabe, $label )
	{
		// Auf potentielle SQL Injections prüfen
		foreach ($this->sql_injection as $injection)
		{
			if (preg_match( "/{$injection}/i", $eingabe ))
			{
				$this->feld_error[$label] = self::FELD_ERROR_INJECTION;
				$eingabe = '';
			}
		}

		// Auf potentielle Email Injections prüfen
		foreach ($this->email_injection as $injection)
		{
			if (preg_match( "/{$injection}/i", $eingabe ))
			{
				$this->feld_error[$label] = self::FELD_ERROR_INJECTION;
				$eingabe = '';
			}
		}
		return $eingabe;
	}

Das sind Teile der Validator-Klasse von phpBuddy.eu.
 
Zuletzt bearbeitet:
Ok, nachdem ich das ERNSTL gekauft habe kann ich auflösen :-)

Lag tatsächlich daran, dass ich einen Unicode (UTF-8) Zeichensatz nutze. Mit einem kleinen „u“ am Ende des Ausdrucks, kann ich die Prüfmethode auf Unicode einstellen.

Code:
/^([a-zA-ZäÄöÖüÜß\xc0-\xc2\xc8-\xcf\xd2-\xd4\xd9-\xdb\xe0-\xe2\xe8-\xef\xf2-\xf4\xf9-\xfb\x9f\xff\.\'\-_]?(\s)?)+$/u

http://php.net/manual/de/reference.pcre.pattern.modifiers.php
http://www.regular-expressions.info/unicode.html

Falls mal jemand mit selber Situation konfrontiert ist ;)
 
mit "char(123);" als Buchtsbaben bzw. Pattern hättest du noch mehr möglichkeiten...bzw. gibt es auch die Möglichkeit, den jeweils richtigen Charset per PHP festzustellen...frag mich jetzt aber nicht, welche funktion das war
 
Zurück