Frage

Ich möchte überprüfen, ob ein String ist ein Dateiname (Name DOT ext) oder nicht.

Name der Datei kann nicht enthalten / ? * : ; { } \

Könnten Sie mir empfehlen, den regulären Ausdruck in preg_match () zu verwenden?

War es hilfreich?

Lösung

Hier gehen Sie:

"[^/?*:;{}\\]+\\.[^/?*:;{}\\]+"

„Ein oder mehrere Zeichen, die keine dieser diejenigen sind, dann einen Punkt, dann ein paar mehr Zeichen, die nicht diese hier sind.“

(Solange Sie sind sicher, dass der Punkt wirklich erforderlich ist - wenn nicht, ist es einfach: "[^/?*:;{}\\]+"

Andere Tipps

$a = preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', 'file.abc');

^ ... $ - begin and end of the string
[^ ... ] - matches NOT the listed chars.

Die Regex wäre so etwas wie (für eine Drei-Buchstaben-Erweiterung) sein:

^[^/?*:;{}\\]+\.[^/?*:;{}\\]{3}$

PHP braucht Schrägstriche entkommen, und preg_match() muss vorwärts Schrägstriche entkommen, so:

$pattern = "/^[^\\/?*:;{}\\\\]+\\.[^\\/?*:;{}\\\\]{3}$/";

Um die Dateinamen wie "hosts" oder ".htaccess" zu entsprechen, verwenden Sie diese leicht modifizierte Ausdruck:

^[^/?*:;{}\\]*\.?[^/?*:;{}\\]+$

Unter dem regex zur Überprüfung Unix Dateinamen in einem Golang Programm:

    reg := regexp.MustCompile("^/[[:print:]]+(/[[:print:]]+)*$")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top