【问题标题】:Removing blank lines from a textarea's output从 textarea 的输出中删除空行
【发布时间】:2011-05-12 00:15:01
【问题描述】:

我从文本区域获取数据,用户必须在每一行输入一个名称。该数据稍后在回车时被拆分。有时用户可能会故意添加空行。如何检测这些行并删除它们?我正在使用 PHP。我不介意使用正则表达式或其他任何东西。

数据不正确

Matthew
Mark
Luke

John

James

正确的数据(注意删除空行)

Matthew
Mark
Luke
John
James

【问题讨论】:

  • rtrim、trim、str_replace

标签: php regex trim


【解决方案1】:

使用正则表达式在爆炸之前消除空行(适用于任意数量的连续空行,另请参见下一个 sn-p):

$text = preg_replace('/\n+/', "\n", trim($_POST['textarea']));

用正则表达式分割:

$lines = preg_split('/\n+/', trim($_POST['textarea']));
$text = implode("\n", $lines);

没有正则表达式的拆分:

$lines = array_filter(explode("\n", trim($_POST['textarea'])));
$text = implode("\n", $lines);

今天感觉有点创意,挑你的毒:)

【讨论】:

  • 很好的答案。由于 Norman 需要将数据作为数组,所以他只需要 preg_split('/\n+/', trim($_POST['textarea']))
  • @JoostK:嗯,你是对的。我的代码现在适当地将$lines$text 分开,以便更容易理解。
  • 抱歉,最后一个代码块不起作用。我们将为空行提供1 byte 空间,因此array_filter 不会删除它。请更正它:)
  • $lines = array_filter(array_map('trim',explode("\n",($_POST['textarea'])))); that will do it.
【解决方案2】:

我相信一个简单的字符串替换就可以解决问题。

str_replace("\r\n\r\n", "\r\n", $text);

【讨论】:

  • 一次性执行此操作会将 3 个换行符转换为 2 个,依此类推。您可以使用while (strpos($text, "\r\n\r\n") !== false) 进行检查。
【解决方案3】:

拆分输入后,循环数组搜索空行:

$lines = explode("\n", $_POST['your_textarea']);
foreach ($lines as $k=>$v) if(empty($v)) unset($lines[$k]);

你甚至可以寻找只包含空格的行来删除它们:

$lines = explode("\n", $_POST['your_textarea']);
foreach ($lines as $k=>$v) if(empty(trim($v))) unset($lines[$k]);

(两个代码sn-ps都未经测试)

注意:用换行符分割时要小心(我用 \n 分割它们,但如果客户端浏览器在 Windows 上运行,则可能是 \r\n)。

【讨论】:

  • array_filter 完全符合您在此处所做的工作。
猜你喜欢
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
相关资源
最近更新 更多