PHP Filterung per Reg Ex

Floletni

Commander
Dabei seit
Sep. 2007
Beiträge
2.245
Ich ahbe momentan ein Problem mit Reg Ex. Ich verusche Daten die Eingeben wurden zu Filtern und falsche Eingabe zu verhindern. Zum Beispiel hat niemand in seinen Namen Zahlen.

Ich hatte das hier probiert:
Code:
if (preg_match("/^[a-z,A-Z,ä,ö,ü,Ä,Ö,Ü,ß,Ç,ç,ñ,â,ô,ó,ò,á,à,é,è,ú,í,-, ,0-9]+$/", $strasse))
{
echo  "passt";
}
else
{
echo  "da is was faul";
}

Von a-z, A-Z bis zum Leerzeichen nimmt er die Eingabe an und gibt mir wie vorgesehen "passt" aus. Sobald aber ein Umlaut oder die speziellen Buchstaben (`;´) gibt es mir "da ist was faul" aus.

Kann mir jemand erklären warum das so ist? Ich bin mit mein Latein am Ende. Ich kenn mich auch nicht so mit reg ex aus um sagen zu können was da nicht stimmt.
 

iGDark

Lt. Junior Grade
Dabei seit
Sep. 2005
Beiträge
305
welche codierung hat dein dokument? evtl. musst du es als utf-8 speichern und das im header bekannt geben.

ansonsten werden umlaute nämlich z.b. von ä nach ä konvertiert. daher findet sie preg_match nicht mehr im string.
 

Floletni

Commander
Ersteller dieses Themas
Dabei seit
Sep. 2007
Beiträge
2.245
Im Header hab ich schon UTF-8 stehen.

Code:
header('content-type: text/html; charset=utf-8');

Wie kann ich die Datei in UTF8 abspeichern?

Oder ein anderer Weg. Wenn ich jetzt das reg ex "ü" schreiben würde, würde er dann die ü`s erkennen?
 

NullPointer

Lt. Commander
Dabei seit
Okt. 2009
Beiträge
1.570
Im Test auf http://rubular.com/ funktioniert der Ausdruck (auch wenn die Kommata da eigentlich nicht rein gehören - dadurch sagst du preg_match einfach nur ~20x "matche ein Komma"). Ich vermute, daß das Problem in der Kodierung liegt, d.h. der String $strasse und dein regulärer Ausdruck verwenden nicht denselben Zeichensatz. Die normalen Buchstaben und Zahlen liegen in allen Zeichensätzen an der gleichen Stelle, aber Umlaute usw. nicht - dann scheitert der Vergleich.

Ich würde mal versuchen, statt die ganzen Sonderbuchstaben da extra aufzuzählen, die Zeichenklasse \w zu verwenden. Diese enthält Buchstaben, Ziffern und den Unterstrich. Mit dem Ausdruck /^[\w\- ]+$/ hättest du dann alles abgedeckt, was in deiner Liste steht.
 

cx01

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
258
Also bei mir läuft dein Programm einwandfrei. Ich hab eben mal ein Input-Feld dazugebaut:
PHP:
<form  method="GET">
<input type="text" name="strasse">
</form>

<?php

$strasse = $_REQUEST['strasse'];

if (preg_match("/^[a-z,A-Z,ä,ö,ü,Ä,Ö,Ü,ß,Ç,ç,ñ,â,ô,ó,ò,á,à,é,è,ú,í,-, ,0-9]+$/", $strasse))
{
    echo  "passt";
}
else
{
    echo  "da is was faul";
}
?>
Und Eingaben wie "äöü" werden akzeptiert.
 
Zuletzt bearbeitet:

Floletni

Commander
Ersteller dieses Themas
Dabei seit
Sep. 2007
Beiträge
2.245
Ich Depp hab jetzt auch rausgefunden an was es lag. Es war nicht in UTF8 gespeichert. Nachdem ich das getan habe funktionierte es einwandfrei.

Danke für eure Hilfe.
 
Top