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

#php #string #laravel #line-breaks #sanitization

#php #строка #laravel #разрывы строк #дезинфекция

Вопрос:

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

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

 $post->comment = str_replace(array("rn", "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
 

Комментарии:

1. Попробуйте $post->comment = preg_replace('~(R{2})R ~', '$1', $request->input('comment'));

2. попробуйте так: str_replace(array("rn", "r", "n"), array('', '', ''), $request->input('comment'));

Ответ №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'));
 

Комментарии:

1. Есть ли что-нибудь, что я мог str_replace бы использовать? Я действительно хочу, так как это намного быстрее и проще для процессора

2. Если бы был способ, я бы опубликовал. str_replace не позволяет проверять контекст, подсчитывать повторения простым способом. Вам пришлось бы добавить больше проверок, и в итоге решение будет работать еще медленнее, чем с регулярным выражением.