regex — удаляет более двух возвратов и более одного пробела внутри строки php

Мне удается удалить пробелы, но я не могу понять, почему это также удалит мои возвращения. В моей форме есть текстовая область, и я хочу разрешить максимум два возврата. Вот то, что я использовал до сих пор.

$string = preg_replace('/\s\s+/', ' ', $string); // supposed to remove more than one consecutive space - but also deletes my returns ...
$string = preg_replace('/\n\n\n+/', '\n\n', $string); // using this one by itself does not do as expected and removes all returns ...

Кажется, первая строка уже избавляется от более чем одного пробела И все возвращается … Что странно. Не уверен, что я делаю это правильно …

2

Решение

Так как \s также будет соответствовать символам новой строки. Поэтому я предлагаю вам использовать \h для соответствия любого вида горизонтальных пространств.

$string = preg_replace('/\h\h+/', ' ', $string);
1

Другие решения

\s match any white space character [\r\n\t\f ]

Смотрите определение \s.Это включает \n.Использование

\h  matches any horizontal whitespace character (equal to [[:blank:]])
1

использование \h для горизонтальных пробелов.

1

Для тех из вас, кому это нужно, вот как вы удаляете два возврата каретки из текстовой области.

preg_replace('/\n\r(\n\r)+/', "\n\r", $str);

Для вопроса о месте, как это было опубликовано выше, замените \ s на \ h

0