我想知道如何限制换行数量。我想要做的是“清理”字符串,以便在将其存储到数据库之前,我最多只能获得两个换行符。
现在我有这个:
$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
答案 0 :(得分:1)
您可以使用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'));