排除文件名的正则表达式

时间:2019-06-10 07:38:20

标签: javascript angularjs regex

我正在尝试上传扩展名为.pdf或.xls的文件 我想从文件名中排除.sh .exe,.js或.bat扩展名,这些扩展名是文件名的末尾或文件名之间 例如filename.exe.pdf我希望将其排除

([a-zA-Z0-9\s_\\.\-:])(?!(exe|sh|js|bat))+(.pdf|.xls)$

使用上述模式,如果文件名是file.pdf,则可以接受,但我想如果文件名是filename.exe.pdf,则应排除exe文件名

目前使用这种模式,直到e.pdf匹配filename.exe.pdf为止。

3 个答案:

答案 0 :(得分:1)

您可以使用

/^(?!.*(?:\.(?:exe|sh|js|bat)(?:\.|$))).*\.(?:pdf|xls)$/i

请参见regex demoregex graph

enter image description here

enter image description here

详细信息

  • ^-字符串开头
  • (?!.*(?:\.(?:exe|sh|js|bat)(?:\.|$)))-之后没有
    • .*-除换行符以外的任意0+个字符,并且尽可能多
    • \.-点
    • (?:exe|sh|js|bat)-列出的任何扩展名
    • (?:\.|$)-字符串的点或结尾
  • .*-除换行符以外的任意0+个字符,并且尽可能多
  • \.-点
  • (?:pdf|xls)-pdfxls
  • $-字符串结尾

答案 1 :(得分:1)

尝试:

^(?:[a-zA-Z0-9\s_\\.\-:](?!\.(?:exe|js|bat|sh)\.))+?(?:\.pdf|\.xls)$

demograph

enter image description here

答案 2 :(得分:0)

您可以这样做:

 var file = files[0], type = file.type;
 if(type.match(/\.(pdf|xls)$/)){
   // only if .pdf or .xls
 }