2016-06-28 26 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