2016-06-28 3 views
2

私は、ユーザーがファイル名に複数のドットを含むファイルをアップロードできるようにしようとしています(例: "file..jpg"、 "test" file.jpg "または" file.jpg.jpeg ")。jQuery regex、ファイル名に複数のドットを使用可能

は、私は現在、唯一可能に次の式を持って\.て1つのドット(例えば「file.jpg」。):

var ext = this.value.match(/\.(.+)$/)[1]; 

これを可能にする方法上の任意のアドバイスはありますか?

完全なスクリプト:

var ext = this.value.match(/\.(.+)$/)[1]; 
switch (ext) { 
    case 'pdf': 
    case 'jpg': 
    case 'png': 
     break; 
    default: 
     alert('Not allowed file type'); 
     this.value = ''; 
}; 
+3

ファイル名の拡張子を取得しようとしていますか?もしそうなら 'this.value.split( '。')。pop()'がそれを行います。 –

+0

ああ、そうです。私の悪い。完全なスクリプトで質問を更新しました。 – TNF

+0

@RoryMcCrossanこれは、トリック、男!これを回答として投稿する必要があります。私はそれを解決策として受け入れます。私は、これが問題を解決しなかったと思うように、最初はだまされましたが、拡張機能の大文字と小文字の区別の問題が原因でした。あなたの助けに感謝します。 – TNF

答えて

1

をお試しくださいpop()を使用してください。有効な拡張子を配列に入れ、indexOf()を使用して妥当性をチェックすることもできます。試してみてください:

var validExt = [ 'pdf', 'jpg', 'png' ]; 
var ext = this.value.split('.').pop(); 

if (validExt.indexOf(ext.toLowerCase()) == -1) { 
    alert('Not allowed file type'); 
    this.value = ''; 
} 
1

上記のコードは、単にファイル名のファイル拡張子を取得しようとしているなら、あなたはその後、.によって配列にファイル名を分割することができ

//var files = this.value.match(/\.([^.]+)$/)[1]; 
var ext = "test.file.jpg".match(/\.([^.]+)$/)[1]; 
switch (ext) { 
    case 'pdf': 
    case 'jpg': 
    case 'jpeg': 
    case 'png': 
     alert('file type allowed'); 
     break; 
    default: 
     alert('Not allowed file type'); 
     this.value = ''; 
}; 
+0

あなたの返信ありがとう!実際には、ファイル名に複数のドットを含むファイルは許可されますが、ファイルタイプの検証が壊れていて、すべてのファイルタイプが通過するようです。 – TNF

関連する問題