【问题标题】:php Laravel only allow a maximum of two line breaks in a rowphp Laravel 只允许最多连续两个换行符
【发布时间】:2017-02-26 06:46:03
【问题描述】:

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

现在我有这个:

$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

【问题讨论】:

  • 试试$post->comment = preg_replace('~(\R{2})\R+~', '$1', $request->input('comment'));
  • 试试这样:str_replace(array("\r\n", "\r", "\n"), array('', '', ''), $request->input('comment'));

标签: php string laravel line-breaks sanitization


【解决方案1】:

您可以使用preg_replace/(\R{2})\R+/ 正则表达式:

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

regex demo

由于单个换行符和 2 个换行符是不可触及的,我们应该只匹配 3 个或更多连续换行符,并且只保留前 2 个,这就是正则表达式匹配的内容。

模式详情

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

替换包含 $1 对 Group 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'));

【讨论】:

  • 无论如何我可以使用str_replace 吗?我真的很想,因为它在 cpu 上更快更容易
  • 如果有办法,我会发布。 str_replace 不允许您检查上下文,以简单的方式计算重复次数。您将不得不添加更多检查,最终解决方案的运行速度甚至比使用正则表达式还要慢。
猜你喜欢
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
相关资源
最近更新 更多