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

标签 php string laravel line-breaks sanitization

我想知道如何限制换行符的数量。我想要做的是“清理”字符串,以便在将其存储到数据库之前最多连续获得两个换行符。

现在我有这个:

$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 个换行符重新插入到结果中。

Online PHP test :

$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/

相关文章:

php - 使用 MySql 和 PHP 将数据分类在一个共同的日期下

ruby - 如何使用 Ruby 删除 CSV 字符串的一部分?

php - Laravel - 可重用的资源 Controller

mysql - 如何选择按日期列 desc 排序的不同记录 - Laravel

c# - 以特定的最大字符数打印一个数字(或字符串)

php - Laravel 架构构建器主键作为外键

php - 如何从 Facebook Graph API 获取所有 friend 的提要

javascript - 按字母顺序搜索元素

javascript - PHP:关联数组到数值数组

c++ - 尝试将字符串的元素与循环和索引进行比较,但索引不会递增