Search code examples
phpfilenamessanitization

Remove all dots in filename except the dot before the file extension


I am trying to sanitize a filename.

I would like to know of a way to remove all decimals from a files name except the last one. I need to keep the last one because the extension follows that.

EXAMPLE:

abc.def.ghij-klmnop.q234.mp3

This file should look like

abcdefghij-klmnopq234.mp3

Some extensions are longer than 3 characters.


Solution

  • You can use a regex with a positive lookahead. Like this:

    $withdots = 'abc.def.ghij-klmnop.q234.mp3';
    $nodots = preg_replace('/\.(?=.*\.)/', '', $withdots);
    

    After executing the above, $nodots will contain abcdefghij-klmnopq234.mp3. The regular expression is basically saying match all periods that are followed by another period. So the last period won't match. We replace all matches with an empty string, and we're left with the desired result.