Ankündigung

Einklappen
Keine Ankündigung bisher.

regex für dateinamen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • regex für dateinamen

    Hallo,

    ich habe folgende Konventionen für eine Zeichenkette:

    Keines dieser Zeichen:
    :/\|<>*?"

    Eine Länge der Zeichenkette von höchstens 31 Zeichen und kein . am Anfang der Zeichenkette (bewusst soll kein .htaccess etc. erstellt werden können)

    Folgendes Regex macht bis auf den \ was es soll:

    PHP-Code:
    <?php
    $dateiname 
    ".abc";
    var_dump(preg_match('/^[^\.\:\/\?\|\<\>\*\?\"][^\.\:\/\?\|\<\>\*\?\"]{0,30}$/i',$dateiname));
    ?>
    Füge ich nun den \ maskiert ein, gibt es einen Fehler:

    PHP-Code:
    <?php
    $dateiname 
    ".abc";
    var_dump(preg_match('/^[^\.\:\/\?\|\<\>\*\?\"\\][^\.\:\/\?\|\<\>\*\?\"\\]{0,30}$/i',$dateiname));
    ?>
    Produziert:
    Compilation failed: missing terminating ] for character class at offset 56

    1. Frage: Warum kommt da ein Fehler. Ich habe den Backslash doch maskiert.

    2. Frage: Kann man diesen Ausdruck kürzer realisieren und wenn ja, wie?

    Gruß Andreas
    Tutorials zum Thema Technik:
    https://pilabor.com
    https://www.fynder.de

  • #2
    1. Frage: Warum kommt da ein Fehler. Ich habe den Backslash doch maskiert.
    Der Fehler bezieht sich auf ein Fehlendes ] - vielleicht hast du ja noch 1 vergessen?
    2. Frage: Kann man diesen Ausdruck kürzer realisieren und wenn ja, wie?
    PHP-Code:
    <?php
    preg_match
    ('#^[^\.\:/\\\|\<\>\*\?]{1,30}\.[^\.\:/\\\|\<\>\*\?]{1,5}$#'$dateiname$matches);
    print_r($matches);
    ?>
    Ich hab mal das.. weiß aber nicht, ob das besser ist..
    Hab beim Regex Dateinamen von 1-30, und Endung von 1-5 Zeichen zugelassen..

    Kommentar


    • #3
      Keines dieser Zeichen:
      :/\|<>*?"
      Ob das reichen wird ?
      Warum nicht den ganzen Spass umdrehen, und sagen nur a-z0-9_ ...
      Nur eben so ein Gedanke.

      Kommentar

      Lädt...
      X