将所有中断点和换行符转换为单个中断点


Converting all breaklines and newlines to a single breakline

我正在尝试清理用户输入,并确保没有多余的换行或断行。目前,我遇到了麻烦,因为用户可以使用三种主要方法来"断行"

'n
<br/>
<br />

<br>有多种变体。因为这些都是HTML中可接受的断行格式。我试着在网上搜索并使用以前的regex表达式,但它们似乎没有捕捉到棘手的

的多个中断点。
<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);

不幸的是,我不太了解正则表达式。我如何创建一个正则表达式来删除所有中断点的这些变体,并将它们保留为一个?这些是我以前用过的:

$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/>