#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 разрыва строки в результат.
$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
не позволяет проверять контекст, подсчитывать повторения простым способом. Вам пришлось бы добавить больше проверок, и в итоге решение будет работать еще медленнее, чем с регулярным выражением.