2016-06-28 24 views
2

我試圖讓用戶可以上傳文件名中有多個點的文件(例如「file..jpg」,「test」)。 file.jpg「或者」file.jpg.jpeg「)。jQuery正則表達式,允許多個點的文件名

我有以下表達式,目前只允許一個點(例如,「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