Frage

Mir wird zunehmend bewusst, dass es große Unterschiede in der Art und Weise geben muss, wie reguläre Ausdrücke von Browsern interpretiert werden.
Ein Kollege hatte beispielsweise diesen regulären Ausdruck geschrieben, um zu überprüfen, ob eine hochgeladene Datei die Erweiterung PDF haben würde:

^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.pdf)$

Dies funktioniert im Internet Explorer und in Google Chrome, jedoch NICHT in Firefox.Der Test schlägt immer fehl, selbst für ein tatsächliches PDF.Also entschied ich, dass die zusätzlichen Dinge irrelevant waren und vereinfachte es wie folgt:

^.+\.pdf$

und jetzt funktioniert es in Firefox einwandfrei und funktioniert weiterhin in IE und Chrome.
Handelt es sich hierbei um eine spezifische Eigenart der Steuerelemente asp:FileUpload und RegularExpressionValidator in ASP.NET oder liegt es einfach daran, dass verschiedene Browser Regex auf unterschiedliche Weise unterstützen?Wie dem auch sei, was sind einige der letzteren, auf die Sie gestoßen sind?

War es hilfreich?

Lösung

Soweit ich weiß, lässt Firefox nicht den vollen Weg eines Uploads. Die Interpretation regulärer Ausdrücke erscheint in diesem Fall irrelevant. Ich habe noch keinen Unterschied zwischen modernen Browsern in der regelmäßigen Expressionsausführung gesehen.

Andere Tipps

Zur eigentlichen Frage:Der ursprüngliche reguläre Ausdruck erfordert, dass der Wert mit einem Laufwerksbuchstaben oder einem UNC-Gerätenamen beginnt.Es ist durchaus möglich, dass Firefox das einfach nicht in den Dateinamen einfügt.Beachten Sie außerdem, dass, wenn Sie die Absicht haben, plattformübergreifend zu arbeiten, dieser reguläre Ausdruck auf jedem Nicht-Windows-System fehlschlagen würde, unabhängig vom Browser, da diese keine Laufwerksbuchstaben oder UNC-Pfade verwenden.Ihr vereinfachter regulärer Ausdruck („Alles akzeptieren, solange es mit .pdf endet“) ist eine so gute Dateinamenprüfung, wie Sie nur bekommen können.

Jedoch, Jonathans Kommentar zur ursprünglichen Frage kann nicht genug betont werden.Niemals, immer Vertrauen Sie dem Dateinamen als angemessenem Mittel zur Bestimmung seines Inhalts.Oder übrigens den MIME-Typ.Die Client-Software, die mit Ihrem Webserver kommuniziert (bei dem es sich möglicherweise nicht einmal um einen Browser handelt), kann Sie über alles anlügen, und Sie werden es nie erfahren, wenn Sie es nicht überprüfen.In diesem Fall bedeutet das, die empfangene Datei in einen Code einzuspeisen, der das PDF-Format versteht, und sich von diesem Code sagen zu lassen, ob es sich um eine gültige PDF-Datei handelt oder nicht.Die Überprüfung des Dateinamens kann dazu beitragen, zu verhindern, dass Personen versuchen, offensichtlich falsche Dateien einzusenden, sie ist jedoch kein ausreichender Test der empfangenen Dateien.

(Mir ist klar, dass Sie möglicherweise wissen, dass eine zusätzliche Validierung erforderlich ist, die nächste Person, die sich in einer ähnlichen Situation befindet und auf Ihre Frage stößt, jedoch möglicherweise nicht.)

Wenn Sie JavaScript verwenden, verursacht es Fehler in Firefox, die Regex nicht mit Schrägstrichen zu schließen.

Versuchen Sie es zu tun var regex = /^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.pdf)$/;

Wie Dave erwähnt, gibt Firefox nicht den Pfad, nur den Dateinamen. Wie er bereits erwähnt hat, berücksichtigt es keine Unterschiede zwischen Betriebssystemen. Ich denke, der beste Check, den Sie durchführen könnten, wäre, zu überprüfen, ob der Dateiname mit PDF endet. Dies ist auch nicht sicher, dass es sich um eine gültige PDF handelt, nur dass der Dateiname mit PDF endet. Abhängig von Ihren Anforderungen möchten Sie möglicherweise überprüfen, ob es sich tatsächlich um ein PDF handelt, indem Sie den Inhalt überprüfen.

Ich habe keinen Unterschied zwischen Browsern in Bezug auf die Mustersyntax bemerkt. Ich habe jedoch einen Unterschied zwischen C# und JavaScript festgestellt, da die Implementierung von C# die Referenzen zurücklässt und die Implementierung von JavaScript nicht der Fall ist.

Ich glaube, JavaScript Res wird vom ECMA -Standard definiert, und ich bezweifle, dass es viele Unterschiede zwischen JS -Dolmetschern gibt. Ich habe in meinen Programmen keine gefunden oder in einem Artikel erwähnt.

Ihre Nachricht ist eigentlich ein bisschen verwirrend, da Sie ASP -Sachen dort hineinwerfen. Ich sehe nicht, wie Sie zu dem Schluss kommen, dass es sich um die Schuld des Browsers handelt, wenn Sie über serverseitige Technologie oder generierte Code sprechen. Tatsächlich wissen wir nicht einmal, ob Sie über JS im Browser, die Validierung des Upload -Feldes (Sie können es nicht mehr tun können, zumindest auf einfache Weise mit FF3) oder auf der Serverseite (weder FF noch Opera Noch Safari lade den vollständigen Pfad der hochgeladenen Datei hoch. Ich bin überrascht zu erfahren, dass Chrome wie dh ...).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top