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

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

我想知道如何限制换行符的数量。我想要做的是 "sanitize" 字符串,这样在将它存储到数据库之前我最多只能连续获得两个换行符。

现在我有这个:

$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+/ 正则表达式一起使用:

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

regex demo

由于单次换行和2次换行都不要碰,所以我们应该只匹配连续3次或以上的换行,并且只保留前2次,也就是正则匹配的。

图案详情:

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

替换包含 </code> 对第 1 组内容的反向引用,将前 2 个换行符重新插入到结果中。</p> <p><a href="https://ideone.com/vpcXGC" rel="nofollow">Online PHP test</a>:</p> <pre><code>$str = 'Dummy text some more text and Dummy text some more text'; $result = preg_replace('~(\R{2})\R+~', '', $str); echo $result;

所以,使用像

这样的东西
$post->comment = preg_replace('~(\R{2})\R+~', '', $request->input('comment'));