Reguläre Ausdrücke Dateinamen prüfen
fr@gma
- javascript
Hallo,
ich möchte für einen PDF-Dateiupload den Dateinamen mit Javascript prüfen.
Leider komme ich nicht weiter.
value.match(/^([a-zA-Z0-9_-]{5,20})+\.pdf$/i)
Ich bekomme es nicht hin, dass die maximale Länge (5-20 Zeichen) erkannt wird.
Kann mir bitte mal jemand helfen?
Danke vorab!
Hallo,
ich möchte für einen PDF-Dateiupload den Dateinamen mit Javascript prüfen.
Leider komme ich nicht weiter.
value.match(/^([a-zA-Z0-9_-]{5,20})+.pdf$/i)
lass das "+" nach der Klammer weg, ansonsten dürfen beliebig oft (mindestens aber einmal) 5-20 Zeichen hintereinander vorkommen.
Abgesehen davon, warum lässt du nur die Zeichen "a-zA-Z0-9\_-" zu? Was ist mit anderen Schriftzeichen, z.B. Umlauten oder Zeichen aus anderen Sprachen?
lass das "+" nach der Klammer weg, ansonsten dürfen beliebig oft (mindestens aber einmal) 5-20 Zeichen hintereinander vorkommen.
Abgesehen davon, warum lässt du nur die Zeichen "a-zA-Z0-9_-" zu? Was ist mit anderen Schriftzeichen, z.B. Umlauten oder Zeichen aus anderen Sprachen?
Achja, und darf ich keine Dateien mit wie "Rechnung.PDF" uploaden? ;)
Hallo,
Achja, und darf ich keine Dateien mit wie "Rechnung.PDF" uploaden? ;)
Geht doch:
/^[a-zA-Z0-9_-]{5,20}\.pdf$/i.test('Rechnung.PDF')
-> true
Der Ausdruck ist ja case-insensitive.
Mathias
Der Ausdruck ist ja case-insensitive.
Stimmt, hab ich glatt übersehen.
Der Ausdruck ist ja case-insensitive.
Stimmt, hab ich glatt übersehen.
Vielen Dank, Whouzuo!
Ohne dem "+"-Zeichen funktioniert es wie gewünscht.
Ich steh mit regulären Ausdrucken noch etwas auf Kriegsfuß.
Die Daten werden mittels AJAX an den Server übertragen, Javascript müsste also eh aktiviert sein. Außerdem prüfe ich die Daten serverseitig wieder, es geht mir nur erst mal darum, unnötige Uploads zu vermeiden (deshalb die Javascript-Prüfung).
Die Prüfung ob es tatsächlich PDF-Dateien sind wird aber bestimmt auch serverseitig unzureichend sein, mir fällt da nur die zusätzliche Prüfung des Mime-Types ein.
Habe aber gelesen, hier kann man auch Beliebiges notieren.
Danke nochmals für die Hilfe.
Die Daten werden mittels AJAX an den Server übertragen, Javascript müsste also eh aktiviert sein. Außerdem prüfe ich die Daten serverseitig wieder, es geht mir nur erst mal darum, unnötige Uploads zu vermeiden (deshalb die Javascript-Prüfung).
Die Prüfung ob es tatsächlich PDF-Dateien sind wird aber bestimmt auch serverseitig unzureichend sein, mir fällt da nur die zusätzliche Prüfung des Mime-Types ein.
Habe aber gelesen, hier kann man auch Beliebiges notieren.
Im Endeffekt kommt es immer darauf an, was mit den Dateien am Ende gemacht werden soll. Und bezüglich der Javascriptprüfung sollte das Feedback auch von der Zielgruppe abhängen. Ich würde im Normalfall dazu tendieren, alle in Dateinamen normalerweise nicht zugelassenen Zeichen abzuchecken und den Rest komplett durchzulassen, also etwa so:
/[1]*.pdf$/i
Und bei Nicht-matchen des Ausdrucks einen Hinweis anzeigen (je nach Zielgruppe) in etwa "Achtung, die Datei scheint keine PDF-Datei zu sein! Trotzdem absenden?" - naja, vielleicht ein bisschen eleganter formuliert. ;)
^...hier nicht erlaubte Zeichen einfügen... ↩︎
Moin Moin!
Die Daten werden mittels AJAX an den Server übertragen, Javascript müsste also eh aktiviert sein.
Wie kommst Du denn auf die lustige Idee?
AJAX erzeugt auch nur HTTP-Requests. Alles, was ich über Uploads wissen muß (zusätzliche Header, Request-URL, etc.), kann ich meinem Client entlocken. Und dann kann ich wieder mal ohne aktives Javascript hochladen.
Außerdem prüfe ich die Daten serverseitig wieder, es geht mir nur erst mal darum, unnötige Uploads zu vermeiden (deshalb die Javascript-Prüfung).
Mehr kann JS auch nicht leisten.
Die Prüfung ob es tatsächlich PDF-Dateien sind wird aber bestimmt auch serverseitig unzureichend sein, mir fällt da nur die zusätzliche Prüfung des Mime-Types ein.
Die Spezifikationen für das PDF-Format findest Du bei Adobe oder der ISO, die englische Wikipedia hat auch einen sehr umfangreichen Artikel zum Thema. Der absolut minimalste Test dürfte sein, ob die ersten fünf Bytes 0x25 0x50 0x44 0x46 0x2D ("%PDF-") sind. Danach folgt die PDF-Versionsangabe, danach eine mehr oder weniger wilde Mischung aus Text und Binärdurchfall. Bessere Tests wühlen darin herum und prüfen wenigstens, ob grobe Strukturen und Längen passen.
Habe aber gelesen, hier kann man auch Beliebiges notieren.
Korrekt, der Client kann als MIME-Type auch mal "x-foobar/x-bazofoo", "application/unknown" oder "application/octet-stream" senden. Oder eben "application/pdf", auch wenn der Dateiinhalt alles andere als PDF ist. Und damit es nicht langweilig wird, hängt der übertragene MIME-Typ oft auch davon ab, was so alles an Software auf dem Client-Rechner installiert ist, und natürlich vom Client (Browser).
Alexander
Moin Moin!
Achja, und darf ich keine Dateien mit wie "Rechnung.PDF" uploaden? ;)
Geht doch:
Richtig, und weil ich gemein bin, kann ich auch HopplaDasSindBestimmtMehrAlsFünfundzwanzigZeichen.pdf.exe hochladen. Denn ich schalte Javascript einfach aus. Die clientseitige Prüfung kann ich zu 100% umgehen, denn der Client ist unter meiner Kontrolle. Das einzig Wahre ist eine serverseitige Prüfung, die clientseitige Prüfung ist nur dekorativer Luxus, der bestenfalls ein paar durch den Server ohnehin abgelehnte Requests vermeidet.
Oh, und natürlich sagt ein Dateiname absolut nichts über den Inhalt einer Datei aus, erst recht nicht die letzten paar Zeichen nach einem Punkt.
Alexander
Die clientseitige Prüfung kann ich zu 100% umgehen, denn der Client ist unter meiner Kontrolle.
Stimmt, kann man nicht oft genug betonen.
Das einzig Wahre ist eine serverseitige Prüfung,
Für die Integrität des Servers sicherlich...
die clientseitige Prüfung ist nur dekorativer Luxus, der bestenfalls ein paar durch den Server ohnehin abgelehnte Requests vermeidet.
...für den User aber ist es weit mehr als dekorativer Luxus, präventiv von seinem Client über einen fehlschlagenden Transfer informiert zu werden. Man kennt es landläufig auch unter dem Begriff "Komfort" ;-)
gudn tach!
Abgesehen davon, warum lässt du nur die Zeichen "a-zA-Z0-9_-" zu? Was ist mit anderen Schriftzeichen, z.B. Umlauten oder Zeichen aus anderen Sprachen?
insb. in englischsprachigen projekten nerven umlaute und aehnliches, weil die von vielen nur umstaendlich ueber die tastatur eingegeben werden koennen. und wenn man noch dazu zeichen zulaesst, die lateinischen buchstaben _aehnlich_ sehen, fuehrt das leicht zu missverstaendnissen und verdruss.
prost
seth
Abgesehen davon, warum lässt du nur die Zeichen "a-zA-Z0-9_-" zu? Was ist mit anderen Schriftzeichen, z.B. Umlauten oder Zeichen aus anderen Sprachen?
insb. in englischsprachigen projekten nerven umlaute und aehnliches, weil die von vielen nur umstaendlich ueber die tastatur eingegeben werden koennen.
Was hat das mit einem PDF Dateiupload zu tun?
gudn tach!
Abgesehen davon, warum lässt du nur die Zeichen "a-zA-Z0-9_-" zu? Was ist mit anderen Schriftzeichen, z.B. Umlauten oder Zeichen aus anderen Sprachen?
insb. in englischsprachigen projekten nerven umlaute und aehnliches, weil die von vielen nur umstaendlich ueber die tastatur eingegeben werden koennen.
Was hat das mit einem PDF Dateiupload zu tun?
die hochgeladene datei wird ja vermutlich irgendeinen zweck erfuellen. meist laedt man sachen irgendwo hoch, damit andere auch darauf zugreifen.
und wenn die datei dann in einem online-verzeichnis ist und jemand moechte nach ihr suchen, hat er u.u. pech gehabt.
oder: alphabetische sortierung? is nicht eindeutig.
missverstaendnisse oder missbrauch kann es z.b. auch geben, wenn dateien wie "tollе_wurst.pdf" (mit kyrillischem 'е') hochgeladen werden.
prost
seth