php Laravel разрешает не более двух разрывов строк подряд

Интересно, как я могу ограничить количество разрывов строк. Что я хочу сделать, так это «дезинфицировать» строку, чтобы я получал максимум два разрыва строки подряд, прежде чем сохранять ее в БД.

Прямо сейчас у меня есть это:

$post->comment = str_replace(array("\r\n", "\r", "\n"), '', $request->input('comment'));

Но это удалит все разрывы строк, и я все еще хочу сохранить один или два разрыва строки подряд.

Dummy text
(linebreak)
some more text

становится этим - все еще с одним разрывом строки

Dummy text
(linebreak)
some more text

а также

Dummy text
(linebreak)
(linebreak)
(linebreak)
(linebreak)
(linebreak)
some more text

становится таким - отображается максимум два разрыва строки:

Dummy text
(linebreak)
(linebreak)
some more text

person user2636197    schedule 17.10.2016    source источник
comment
Попробуйте $post->comment = preg_replace('~(\R{2})\R+~', '$1', $request->input('comment'));   -  person Wiktor Stribiżew    schedule 17.10.2016
comment
попробуй так: str_replace(array("\r\n", "\r", "\n"), array('', '', ''), $request->input('comment'));   -  person Filip Koblański    schedule 17.10.2016


Ответы (1)


Вы можете использовать регулярное выражение preg_replace с /(\R{2})\R+/:

 ~(\R{2})\R+~

См. демонстрацию регулярного выражения.

Поскольку один разрыв строки и 2 разрыва строки трогать нельзя, мы должны сопоставлять только 3 или более последовательных разрыва строки и оставлять только первые 2, это то, что соответствует регулярному выражению.

Сведения о шаблоне:

  • (\R{2}) - Группа 1 захватывает 2 разрыва строки
  • \R+ — 1 или более разрывов строк

Замена содержит $1 обратную ссылку на содержимое внутри группы 1, повторно вставляя первые 2 разрыва строки в результат.

Онлайн-тест PHP:

$str = 'Dummy text

some more text

and
Dummy text





some more text';
$result = preg_replace('~(\R{2})\R+~', '$1', $str);
echo $result;

Итак, используйте что-то вроде

$post->comment = preg_replace('~(\R{2})\R+~', '$1', $request->input('comment'));
person Wiktor Stribiżew    schedule 17.10.2016
comment
Могу ли я в любом случае использовать str_replace ? Я действительно хочу, так как это намного быстрее и проще на процессоре - person user2636197; 17.10.2016
comment
Если бы был способ, я бы разместил. str_replace не дает проверить контекст, подсчитывает повторы простым способом. Вам придется добавить больше проверок, и в итоге решение будет работать даже медленнее, чем с регулярным выражением. - person Wiktor Stribiżew; 17.10.2016