Как удалить все непечатаемые символы в строке и сохранить некоторые из них?

Я использую это

$string = preg_replace('/[\x00-\x1F\x7F\xA0]/u', '', $string);

Это регулярное выражение по этой ссылке PHP: Как удалить все непечатаемые символы в строке?

Регулярное выражение удаляет \n но я хотел бы сохранить это. Что я должен делать?

Я думаю \n является 000A, так что я попробовал что-то вроде этого (это заставит все регулярные выражения перестать работать)$string = preg_replace('/[\x00-\x1F\x7F\xA0[ˆ\x0A]]/u', '', $string);

Я ценю любую помощь.

3 ответа

Решение

Диапазон \x00-\x1F содержит \x0A,

Вы должны разделить этот диапазон.

$string = preg_replace('/[\x00-\x09\x0B-\x1F\x7F\xA0]/u', '', $string);

Минимальное изменение исходного выражения:

/(?!\n|\r)[\x00-\x1F\x7F-\xFF]/u

Использует отрицательный прогноз, чтобы не совпадать с переводами строки и возвратом каретки.

Попробуй это

[\x00-\x1F\x7F\xA0[^\x0A^\x0d]]

Пояснение:

x0A - перевод строки (\ n)

x0d - возврат каретки (\r)

Пример:

https://regexr.com/3k3bm

Другие вопросы по тегам