Я не PHP-разработчик, но могу вам сказать, что использование защиты на основе Regex для такого сценария похоже на ношение футболки от урагана.
Эта проблема известна как каноническая уязвимость на языке безопасности (когда ваше приложение анализирует заданное имя файла до того, как ОС сможет преобразовать его в абсолютный путь к файлу). Злоумышленники смогут найти любое количество изменений имени файла, которое почти наверняка не будет соответствовать вашему регулярному выражению.
Если вы должны использовать Regex, сделайте его настолько пессимистичным, насколько это возможно (соответствует только действительным именам файлов, отклоните все остальное). Я бы посоветовал вам немного изучить методы канонизации в PHP.