我想知道如何限制换行符的数量。我想要做的是“清理”字符串,以便在将其存储到数据库之前最多连续获得两个换行符。
现在我有这个:
$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 个或多个换行符
替换包含对第 1 组内容的 $1
反向引用,将前 2 个换行符重新插入到结果中。
$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'));
关于php Laravel 只允许连续最多两个换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40083756/