PHP Слить количество разрывов строки подряд и уменьшить его при необходимости? - PullRequest
3 голосов
/ 18 января 2012

У меня есть текстовая область, где пользователи могут отправлять сообщения в PHP.Я хочу проверить количество разрывов строк в строке и уменьшить его, если необходимо, например.

ОРИГИНАЛ:

Hello\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
Goodbye

ЧТО ХОЧУВ КОНЦЕ:

Hello\n
\n
Goodbye

В общем, я хочу максимум 2 разрывов строки подряд .Как я могу добиться этого в PHP?

Спасибо за любую помощь.

Ответы [ 3 ]

7 голосов
/ 18 января 2012

PCRE:

preg_replace('/\n{3,}/m', "\n\n", $text);
1 голос
/ 18 января 2012

Я бы сделал цикл замены

$data = "Hello\n\n\n\n\n\n\n\n\n\n\n\n\nGoodbye";
while(($newdata = str_replace("\n\n\n", "\n\n", $data) != $data){
    $data = $newdata;
}

Это заменит 3 \ n на 2 \ n, пока есть возможности.

Имейте в виду, что вам может понадобиться заменитьвсе \ r тоже с \ n, потому что ваш ввод никогда не может быть идеальным.Это также не учитывает возможности пробелов между \ n.

0 голосов
/ 03 апреля 2012

Чтобы добавить к ответу tandu, этот вариант учитывает также возврат каретки:

preg_replace(array('/\r/m','/\n{3,}/m'), array("\n","\n\n"), $text);

Сначала преобразуйте \r в \n, чтобы \r\n последовательности были уменьшены до \n\n. Затем фильтр для последовательных \n завершает работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...