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