我從textarea獲取數據,用戶必須在每行上輸入一個名稱。該數據後來在回車時被分割。有時用戶可能會故意添加空行。我如何檢測這些行並刪除它們?我使用PHP。我不介意使用正則表達式或其他任何東西。從textarea的輸出中刪除空行
不正確的數據
Matthew
Mark
Luke
John
James
正確的數據(注意:刪除空行)
Matthew
Mark
Luke
John
James
我從textarea獲取數據,用戶必須在每行上輸入一個名稱。該數據後來在回車時被分割。有時用戶可能會故意添加空行。我如何檢測這些行並刪除它們?我使用PHP。我不介意使用正則表達式或其他任何東西。從textarea的輸出中刪除空行
不正確的數據
Matthew
Mark
Luke
John
James
正確的數據(注意:刪除空行)
Matthew
Mark
Luke
John
James
使用正則表達式來消除空白行前爆炸(非常適用於任何數量的連續空白行,也見下一段):
$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']))'是他所需要的。 – Joost 2010-11-18 12:43:01
@JoostK:恩,你說得對。我的代碼現在將'$ lines'與'$ text'恰當地分開,這樣更容易遵循。 – BoltClock 2010-11-18 12:47:24
對不起,但最後的代碼塊不會工作。我們將得到一個'1字節'的空行空間,因此'array_filter'不會削減它。請改正:) – Kishor 2015-05-26 03:24:09
一個簡單的字符串替換應該我相信訣竅。
$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);
單步執行此操作會將3個換行符轉換爲2,依此類推。你可以使用'while(strpos($ text,「\ r \ n \ r \ n」)!== false)'來檢查。 – BoltClock 2010-11-18 12:35:17
分裂您的輸入,循環數組尋找空行後代碼片段未經測試)
注意:通過換行符分割時要小心(I分割由\ n編輯它們,但如果客戶端瀏覽器在Windows上運行,則可能是\ r \ n)。
'array_filter'完全正是你在這裏做的。 – Joost 2010-11-18 12:44:17
rtrim,trim,str_replace – ajreal 2010-11-18 12:32:15