php Laravel连续允许最多两个换行符

时间:2016-10-17 10:16:05

标签: php string laravel line-breaks sanitization

我想知道如何限制换行数量。我想要做的是“清理”字符串,以便在将其存储到数据库之前,我最多只能获得两个换行符。

现在我有这个:

$post->comment = str_replace(array("\r\n", "\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 个答案:

答案 0 :(得分:1)

您可以使用preg_replace /(\R{2})\R+/正则表达式:

 ~(\R{2})\R+~

请参阅regex demo

由于不会触及单个换行符和2个换行符,因此我们应该仅匹配3个或更多连续换行符,并且只保留前2个,即正则表达式匹配的行。

模式详情

  • (\R{2}) - 第1组捕获2个换行符
  • \R+ - 1个或多个换行符

替换包含对组1内容的$1反向引用,将前2个换行符重新插入到结果中。

Online PHP test

$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'));