2010-11-18 61 views
1

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

不正确的数据

Matthew 
Mark 
Luke 

John 

James 

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

Matthew 
Mark 
Luke 
John 
James 
+1

rtrim,trim,str_replace – ajreal 2010-11-18 12:32:15

回答

9

使用正则表达式来消除空白行前爆炸(非常适用于任何数量的连续空白行,也见下一段):

$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); 

只是感觉今天一点点创意,挑选你的毒药:)

+0

很好的回答。由于Norman需要将数据作为数组,所以'preg_split('/ \ n + /',trim($ _ POST ['textarea']))'是他所需要的。 – Joost 2010-11-18 12:43:01

+0

@JoostK:恩,你说得对。我的代码现在将'$ lines'与'$ text'恰当地分开,这样更容易遵循。 – BoltClock 2010-11-18 12:47:24

+0

对不起,但最后的代码块不会工作。我们将得到一个'1字节'的空行空间,因此'array_filter'不会削减它。请改正:) – Kishor 2015-05-26 03:24:09

0

一个简单的字符串替换应该我相信诀窍。

$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]); 

(无论

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

单步执行此操作会将3个换行符转换为2,依此类推。你可以使用'while(strpos($ text,“\ r \ n \ r \ n”)!== false)'来检查。 – BoltClock 2010-11-18 12:35:17

0

分裂您的输入,循环数组寻找空行后代码片段未经测试)

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

+2

'array_filter'完全正是你在这里做的。 – Joost 2010-11-18 12:44:17