我想知道如何限制换行的数量。我想做的是"消毒"字符串,以便在将其存储到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'));