Я пытаюсь дезинформировать пользовательский ввод и гарантировать отсутствие избыточных строк или новых строк. В настоящее время у меня возникают проблемы из-за того, что пользователи могут использовать три основных способа "разлома",
\n
<br/>
<br />
И есть много вариантов <br>
. Поскольку все это приемлемые форматы для разбивки на HTML. Я пробовал искать в Интернете и использовать предыдущие выражения регулярных выражений, но они, похоже, не улавливают множественные строки для сложного
<br/><br /><BR>< br >
Чтобы упростить задачу, я подумал о преобразовании всей строки только в стандартизованные строки, поэтому каждая \r
и \n
станет какой-то формой <br/>
или <br/>
, и это может быть проще проанализировать, делая что-то вроде:
$string = 'some input with breaklines and newlines';
$string = nl2br($string);
$string = preg_replace(regex_expression, replacement, $string);
К сожалению, я не знаю regex очень хорошо. Как я могу создать выражение регулярных выражений, чтобы удалить эти варианты всех разломов и сохранить их в одном? Это предыдущие, которые я использовал:
$text = preg_replace('/(?:(?:\r\n|\r|\n)\s*){2}/s', "\n\n", $text);
$text = preg_replace("/[\r\n]+/", "\n", $text);
$text = preg_replace('/(<br[^>]*>\s*){2,}/', '<br/>', $text);
Или, лучше, есть ли более эффективный и практичный способ сделать это? Я предполагаю, что на большинстве пользовательских сайтов есть какая-то система.
Вот пример строки, которую я нашел проскальзыванием:
String testing for newlines.<br/><br />
<br/><br />
<br/><br />
Edit 1<br/><br />
<br/><br />
<br/><br />
Edit 3:<br/><br />
Removed redundant newlines
Что вы хотите
$text = preg_replace("/(\r|\n|(\<\s*br\s*\/?\s*>))+/i", "<br/>", $text);
Заменив все кратные \r,\n, <[ ]br[ ][/][ ]>
и <[ ]BR[ ][/][ ]>
на один <br/>