Search code examples
phppreg-replacestripfile-extensionsanitization

Regex to remove multimedia extensions from filename


I want strip all multimedia file extensions from a filename using preg_replace().

File extensions to remove:

  • .m4a
  • .wav
  • .ogg
  • .flac
  • .avi
  • .flv
  • .mov
  • .m3u
  • .mid
  • .webm
  • .mkv
  • .asf
  • .mpg
  • .mpeg
  • .mp(INT)
  • .mpg(INT)
  • .mpeg(INT)
  • .aif
  • .aiff
  • .3gp
  • .3gpp
  • .wma
  • .wmv

My coding attempt:

$filename = 'bla.mp3 bla bla.mid.mp3.mp4.mid.mp10.mpeg.mpg.mpg10';
echo preg_replace('/[\.(m4a|wav|ogg|flac|avi|flv|mov|m3u|mid|webm|mkv|asf|wm(a|v)|mp(\d+)|aif(?:f?)|3gp(?:p?))]*$/', '', $filename);

Solution

  • try this

    $filename = 'bla.mp3 bla bla.mid.mp3.mp4.mid.mp10.mpeg.mpg.mpg10';
    echo preg_replace('/\.(m4a|wav|ogg|flac|avi|flv|mov|wmv|m3u|mid|wma|webm|mkv|asf|mp(\d+)|aif(?:f?)|3gp(?:p?)|mp(eg(\d+)?|g(\d+)?))/g', '', $filename);
    

    you can check it out here


    Edit

    echo preg_replace('/\.(m4a|wav|ogg|flac|avi|flv|mov|wmv|m3u|mid|wma|webm|mkv|asf|mp(\d+)|aif(?:f?)|3gp(?:p?)|mpe?g\d*)/g', '', $filename);
    

    you can check it out here


    Final Edit

    removed handling mp(\d+) and handling mpe?g\d* and used only mp(e?g)?\d* to handle both cases and that is the simplest it could get -in my humble opinion-

    echo preg_replace('/\.(m4a|wav|ogg|flac|avi|flv|mov|wmv|m3u|mid|wma|webm|mkv|asf|aif(?:f?)|3gp(?:p?)|mp(e?g)?\d*)/g', '', $filename);
    

    you can check it out here

    author edit

    this is the simplified form of it

    echo preg_replace('/\.a(if(?:f?)|sf|vi)|fl(ac|v)|m(3u|4a|id|kv|ov|(p(e?g)?\d*))|ogg|‌​w(av|ebm|m(a|v))/g', '', $filename);