2017-12-16 12 views
0

Ich versuche, einen Dateinamen mit ungültigen Zeichen im Dateinamen zu validieren, ohne den Dateipfad zu überprüfen. Ich habe verschiedene Kombinationen ausprobiert, aber keine meiner JavaScript-Funktionen scheint den Trick zu machen.Auf ungültige Zeichen (Sonderzeichen und internationales Zeichen) im Dateinamen prüfen, ohne Dateipfad zu überprüfen

@Html.TextBoxFor(model => model.Attachment, new { type = "file" , onchange = "ValidateFileName(this)" }) 

JS:

function ValidateFileName(name) { 
     if (name.value.match(/\.\.[a-z][a-z][a-z]$/) || name.value.match(/\.\.[a-z][a-z][a-z][a-z]$/) || name.value.match(/^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\|\*\?\\:%<>/$"]*[^\.\|\*\?\\:%<>/$"]+$/)) { 

      alert('Invalid file extension.'); 
      name.form.reset(); 
      name.focus(); 
      return false; 
     } 
    } 

Antwort

1

Dies ist der reguläre Ausdruck, den ich normalerweise verwenden, um Windows-Dateinamen zu validieren:

^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?$)[^\x00-\x1f\\?*:\";|/]+$ 

aber wenn Ihr name Variable den Pfad-Datei enthält, können, müssen um den Dateinamen daraus zu extrahieren mit:

var filename = name.split(/(\\|\/)/g).pop(); 

oder:

var name_pieces = name.split('\\'); 
var filename = name_pieces[name_pieces.length - 1]; 

Auf einer Seite zur Kenntnis, doppelt das Verhalten dieses Teils des Codes überprüfen:

onchange = "ValidateFileName(this)" 

, weil ich das Gefühl, etwas falsch zumachen, es ist ... Ich weiß nicht wissen, aber etwas halten auf mich zu sagen, geschrieben werden soll, wie:

onchange = "ValidateFileName(this.value)" 
+0

Ich habe den Pfad vom Dateinamen getrennt. Vielen Dank ! Es funktioniert jetzt. Beantworte auch deine Frage zu diesem Wert, da meine JS-Funktion tatsächlich mit Parameter.value überprüft, dass ich diesen Wert nicht übergebe. – user7221204

0

In .NET Sie die Path.GetInvalidFileNameChars() statische Methode verwenden, um eine Liste von inval zu bekommen ID-Zeichen. (Hinweis: Es gibt auch Path.GetInvalidPathChar() für Dateipfadzeichen, die unterschiedlich sind).

Auf der Server-Seite, Sie können dies tun:

var invalidChars = Path.GetInvalidFileNameChars(); 
var hasBadChars = filename.Any(c => invalidChars.Contains(c)); 

Für die Seite JS, Sie könnten die invalidChars in eine JS-Array serverseitigen Ausgang, tun dann so etwas wie dieses:

if (invalidChars.some(function(v) { return filename.indexOf(v) >= 0; })) { 
    // There's at least one 
} 
+0

Ich habe die Server-Seite davon verstanden. Aber könnten Sie mir sagen, wie Sie den JS-Teil implementieren? Ich möchte nur das Dateifeld zurücksetzen und eine Warnung anzeigen, dass ungültige Zeichen vorhanden sind. – user7221204

Verwandte Themen