php Laravel一行最多只允许两次换行


php Laravel only allow a maximum of two line breaks in a row

我想知道如何限制换行的数量。我想做的是"消毒"字符串,以便在将其存储到DB之前,一行中最多只能获得两次换行。

现在我有这个:

$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

您可以使用preg_replace/('R{2})'R+/ regex:

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

查看regex演示

由于一个换行符和两个换行符不能被触碰,我们应该只匹配3个或更多连续的换行符,并且只保留前两个,这就是正则表达式匹配的。

<

模式细节/strong>:

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

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

在线PHP测试:

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