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
 

Neue Beiträge

Zurück