16 Stimmen

Regex zum Finden gültiger Dateinamen

Ich möchte prüfen, ob eine Zeichenkette ein Dateiname ist (name DOT ext) oder nicht.

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

Könnten Sie mir bitte den Regex-Ausdruck vorschlagen, der in preg_match() zu verwenden ist?

19voto

RichieHindle Punkte 256891

Hier ist es:

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

"Ein oder mehrere Zeichen, die keine von diesen sind, dann ein Punkt, dann weitere Zeichen, die keine von diesen sind."

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

6voto

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

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

2voto

Tomalak Punkte 320467

Die Regex würde etwa so lauten (für eine Erweiterung mit drei Buchstaben):

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

PHP benötigt Backslashes, die escaped werden, und preg_match() müssen Schrägstriche vermieden werden, also:

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

Um Dateinamen wie "hosts" o ".htaccess" verwenden Sie diesen leicht abgewandelten Ausdruck:

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

1voto

user3627897 Punkte 11

Nachfolgend die Regex, die zur Überprüfung von Unix-Dateinamen in einem Golang-Programm verwendet wird:

    reg := regexp.MustCompile("^/[[:print:]]+(/[[:print:]]+)*$")

0voto

richardev Punkte 936

Hier ist eine einfach zu verwendende Lösung mit spezifischen Dateierweiterungen:

$file = 'file-name_2020.png';
$extensions = array('png', 'jpg', 'jpeg', 'gif', 'svg');
$pattern = '/^[^`~!@#$%^&*()+=[\];\',.\/?><":}{]+\.(' . implode('|', $extensions). ')$/u';

if(preg_match($pattern, $discount)) {
    // Returns true
}

Beachten Sie, dass in diesem Szenario nur folgende Sonderzeichen zulässig sind - y _ . Um mehr zuzulassen, entfernen Sie sie einfach aus $pattern

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X