2017-12-16 9 views
0

ファイルパスの検証なしでファイル名に無効な文字を含むファイル名を検証しようとしています。私はさまざまな組み合わせを試みたが、私のJavaScript関数のどれもそのトリックをやっていないようだ。無効な文字(特殊文字と国際文字)がファイルパスの検証なしでファイル名に含まれていないか確認してください。

@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; 
     } 
    } 

答えて

1

これは、私は通常、Windowsのファイル名を検証するために使用する正規表現です:

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

が、あなたのname変数は、ファイルのパスが含まれている場合、あなたが最初に持っています

var filename = name.split(/(\\|\/)/g).pop(); 
を使用してファイル名を抽出します。

か:

サイドノートで
var name_pieces = name.split('\\'); 
var filename = name_pieces[name_pieces.length - 1]; 

は、二重のあなたのコードのこの部分の動作を確認してください。

onchange = "ValidateFileName(this)" 

何か間違っ受けている私は感じるので...私はしないでください知っているが、何かが、それはのように記述しなければならない私に告げるに保つ:.NETで

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

ファイル名からパスを分割することは、私が欠けていたものでした。ありがとうございました !それは今働く。私のJS関数が実際にparameter.valueでチェックするので、this.valueについてのあなたの質問にも答えています。私はthis.valueを渡していませんでした。 – user7221204

0

、あなたはINVALのリストを取得するにはPath.GetInvalidFileNameChars()静的メソッドを使用することができますid文字。 (注:ファイルパス文字には、Path.GetInvalidPathChar()もあります)。

サーバー側で

、あなたがこれを行うことができます:

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

をJS側に対しては、出力JSアレイサーバー側にinvalidCharsは、このような何かを行うことができます:

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

私はそれのサーバー側を理解しました。しかし、JSの部分を実装する方法を教えてください。私はちょうどファイルフィールドをリセットし、無効な文字があることを警告を表示するために探しています。 – user7221204

関連する問題