Andreas: REGEX vielleicht doch ohne "ohne"?

Beitrag lesen

Hallo!

Ich will die Eingaben von Datei- und Verzeichnisnamen der User überprüfen und bei allen Umlauten, Sonder- und Leerzeichen _außer_ dem "_" eine Fehlermeldung ausgeworfen kriegen...

Es wäre das beste Du definierst anders herum alle Zeichen die erlaubt sein sollen. \w heißt Worte, steht für die Zeichenklasse [a-zA-Z0-9_] also, \W heißt genau das Gegenteil, alles außer \w. Da bei Standardeinstellungen die CK genannt hat ;-) äöüÄÖÜß nicht zu \w gehören, hast Du mit \W alle Zeichen außer gültigen Buschstaben, Zahlen, und Unterstrichen. Jetzt mußt Du nur noch definieren, welche Zeichen Du zusätzlich erlauben willst, also wenn Du komplette Dateinamen haben willst brauchst Du auch ".", wenn Du komplette Pfade willst, auch "/" oder "", je nach Betriebssystem. Sonst sollte in den Namen nur "-" vorkommen dürfen. Wenn Du jetzt eine Fehlermeldung ausgeben willst, wenn der String andere Zeichen als \w und einige andere bestimmte Zeichen enthält, würde ich das mit einer Zeichenklasse [ ] machen. Mit ^ kannst Du die Bedeutung aller Zeichen in der zeichenklasse umkehren, also [\W] = [^\w]

eine lösung sähe so aus:

preg_match("/[^\w-]/i",$projekt_ordnername)

damit gibt preg_match einen Wert zurück, wenn ein Zeichen außer a-z, A-Z, 0-9, _ und - vorkommt. Denke daran das - am Ende der Zeichenklasse stehen muß, da es sonst eine andere Bedeutung hat. Wenn Du jetzt noch "." erlauben willst mußt Du die Zeichenklasse so abändern:

[^\w.-]

Du könntest z.B. Auch kontrollieren ob es eine gültiger Datename ist:

[\w-]+.\w{1,4}

hier wird ein Wert zurückgegeben wenn  es ein "typischer" Dateiname ist(das Gegenteil von vorher!)

Wenn Du Verzeichnisse und Dateien prüfst würde ich das ungefähr so machen:

[\w-]+.?\w{0,4}?

Geht bestimmt auch besser, naja, hoffe es hilft! Wie gesagt, wird im Gegesatz zum 1. Beispiel beim 2. und 3. bei einer korrekten Datei/Verzeichnis ein Wert zurückgegeben, nicht bei einem Fehler!

Grüße
Andreas

Grüße
Andreas