2010-11-18 91 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