Удаление пустых строк из вывода текстовой области

Я получаю данные из текстовой области, где пользователь должен ввести имя в каждой строке. Эти данные позже разделяются при возврате каретки. Иногда пользователь может намеренно добавлять пустые строки. Как я могу обнаружить эти строки и удалить их? Я использую PHP. Я не против использования регулярного выражения или чего-то еще.

Неверные данные

Matthew
Mark
Luke

John

James

Верные данные (обратите внимание, что пустые строки удалены)

Matthew
Mark
Luke
John
James

person Norman    schedule 18.11.2010    source источник
comment
rtrim, обрезка, str_replace   -  person ajreal    schedule 18.11.2010


Ответы (3)


Использование регулярных выражений для удаления пустых строк перед взрывом (хорошо работает для любого количества последовательных пустых строк, см. также следующий фрагмент):

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

Просто чувствую себя немного творчески сегодня, выбери свой яд :)

person BoltClock    schedule 18.11.2010
comment
Отличный ответ. А поскольку Норману нужны данные в виде массива, preg_split('/\n+/', trim($_POST['textarea'])) — это все, что ему нужно. - person Joost; 18.11.2010
comment
@JoostK: Ну, ты прав. Мой код теперь правильно отделяет $lines от $text, чтобы его было легче понять. - person BoltClock; 18.11.2010
comment
Извините, но последний блок кода не работает. Мы получим 1 byte пробела для пустых строк, и, следовательно, array_filter его не обрежем. Пожалуйста, исправьте :) - person Kishor; 26.05.2015
comment
$lines = array_filter(array_map('trim',explode("\n",($_POST['textarea'])))); это сделает. - person Kishor; 26.05.2015

Я считаю, что простая замена строки должна помочь.

str_replace("\r\n\r\n", "\r\n", $text);
person BeemerGuy    schedule 18.11.2010
comment
Выполнение этого за один проход преобразует 3 новых строки в 2 и так далее. Вы можете использовать while (strpos($text, "\r\n\r\n") !== false) для проверки. - person BoltClock; 18.11.2010

После разделения ввода зациклите массив на наличие пустых строк:

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

(Оба фрагмента кода не проверены)

ПРИМЕЧАНИЕ. Будьте осторожны при разделении с помощью разрывов строк (я разделил их с помощью \n, но может быть и \r\n, если клиентский браузер работает в Windows).

person pau.moreno    schedule 18.11.2010
comment
array_filter делает именно то, что вы делаете здесь. - person Joost; 18.11.2010