2011-01-13 4 views
0

Ich habe eine Dateieingabe in einem Formular, das eine MP3-Datei hochlädt, aber ich möchte reservierte Zeichen zu meinem System im Dateinamen erkennen, wie! @ oder irgend ein anderer.Erkennen Sie einige reservierte Zeichen in einer Zeichenfolge mit Javascript

Alle Codes, die ich gefunden habe, ersetzen diese Zeichen, aber ich möchte sie nur erkennen, um den Benutzer zu warnen. Ich denke, es wird mit regulären Ausdrücken leicht sein, aber ich weiß nicht über sie.

Ich benutze JQuery/Javascript.

bearbeiten meine Problembeschreibung verbessern:

Ich bin in einer CodeIgniter Anwendung arbeiten, die Benutzer von MP3-Dateien auf den Server hochladen können. Ich benutze jQuery, um clientseitige Formulare zu verwalten. Die CI-Upload-Klasse konvertiert Leerzeichen im Dateinamen in Unterstriche und alles funktioniert. Aber beim Testen der Anwendung habe ich eine MP3-Datei mit einem (!) Im Namen hochgeladen, und ich habe Probleme damit.

Ich möchte nur eine Javascript-Bedingung einfügen, bevor die Datei hochgeladen wird, um zu bewerten, ob der Dateiname des Benutzers ein (!) Enthält (oder irgendein anderes, das ich später hinzufügen möchte), um nach der Datei zu fragen wenn es so ist.

+0

in welchem ​​System sind Sie? verschiedene Betriebssysteme haben unterschiedliche illegale Zeichen – Jeff

+2

Javascript ist Client-Seite, was bedeutet, Clients haben Zugriff darauf, so ist es möglich, Ihren Code zu überschreiben und daher unsicher, sollten Sie alles erlauben, wie @pekka sagt und validieren/bereinigen unter PHP, wo der Client keine hat Zugang, um das Ergebnis zu ändern. – RobertPitt

Antwort

1

Eine Möglichkeit wäre, den tatsächlichen Wert des Eingabefeldes mit einem durch encodeURIComponent codierten zu vergleichen. Wenn sie identisch sind, ist der Dateiname sicher.

Beachten Sie jedoch, dass der Browser möglicherweise überhaupt keinen Dateinamen meldet. Mein Plugin reagiert darauf, indem es true zurückgibt, wenn kein Wert zurückgegeben wird. Dies kann natürlich bedeuten, dass kein Wert festgelegt wurde.

jQuery-Plugin:

(function($) { 
    $.fn.fileNameIsValid = function() { 
     var val = this[0].value.replace('C:\\fakepath\\', ''); 

     return !val || encodeURIComponent(val) === val; 
    } 
}(jQuery)); 

Sie können dies dann rufen wie so:

if ($('#yourFileInput').fileNameIsValid()) { 
    // filename validates 
} 
+0

Hallo. Danke für deine Antwort! Dein Code ist mir zu schwer. Ich will nur eine Bedingung zu bewerten, wenn in $ ('input # file'). Val() gibt es einige konfliktreiche Zeichen. – FranQ

+0

@FranQ Das ist genau das, was mein Code tut. Siehe die aktualisierte Version. – lonesomeday

+0

Ok, du hast Recht. Dein Code ist großartig. Ich habe es versucht und funktioniert gut. Aber ich brauche es nicht. Ich arbeite mit codeIgniter und meine Dateinamen sind bereinigt (Leerzeichen, etc.) mit seiner Upload-Klasse. Wenn ich Ihr Plugin verwende, kann das Formular keine Dateinamen mit Leerzeichen laden. Ich muss nur einige Zeichen kontrollieren, die die Klasse nicht überprüft. – FranQ

3

Erwägen nicht blockiert überhaupt keine Zeichen. Es ist nur ein Aufwand für den Benutzer, und auf exotischen Systemen mit seltsamen Pfad Zeichen, können Sie am Ende nicht den Benutzer überhaupt nichts hochladen lassen.

Lassen Sie den Benutzer die Datei hochladen und speichern Sie den Dateinamen auf dem Server in URI-codierten Form (in PHP, urlencode() wäre die richtige Funktion zu gehen). Dadurch wird der Dateiname mit Ihrem Betriebssystem kompatibel und der Benutzer kann beim erneuten Herunterladen der Datei alle Sonderzeichen beibehalten.

+0

+1 Erlauben Sie dem Benutzer, alles zu tun, aber sanitize Back-End .. immer den Weg zu gehen – RobertPitt

+0

Guter Rat. Ich merke es mir. Vielen Dank – FranQ