Собрал регулярное выражение [\\\]+[nfvabrt0]{1} для замены некоторых символов (\n, \t, \0 и т.д.) функцией preg_replace() тут. Вроде работает, но скрипт при вводе "С:\Program Files" возвращает "С:Pogm Files" при вводе "127.0.0.1" возвращает "127...1".
Пробовал разные флаги результат тот же.
Подскажите ошибку.
Каждый из управляющих символов (\n, \t, ...) - это один целый символ (не два). Ведущий слэш - способ записи такого символа, а вовсе не отдельный, самостоятельный символ. Как следствие, отрывать слэш от "буковки" в регулярном выражении нельзя.
Правильное выражение должно иметь вид:
$output = preg_replace("/[\n\f\v\a\b\r\t\0]+/", '', $input);
Чтобы не писать всю эту кучу символов ручками, в PCRE есть символьный класс [:cntrl:]. Вот как его можно использовать для решения той же самой задачи:
$output = preg_replace("/[[:cntrl:]]+/", '', $input);
О других символьных классах вы можете узнать из официальной документации.
A вот и рабочий пример кода: https://3v4l.org/cjiLI
Продвижение своими сайтами как стратегия роста и независимости