2010-11-18 23 views
1

ユーザが各行に名前を1つ入力する必要があるテキストエリアからデータを取得します。そのデータは後で復帰時に分割されます。ユーザが空白行を意図的に追加することがあります。これらの行を検出して削除するにはどうすればよいですか?私はPHPを使用しています。私はregexpまたは何かを使用して気にしない。テキストエリアの出力から空白行を削除する

不正データ

Matthew 
Mark 
Luke 

John 

James 

正しいデータの連続する任意の数のためにうまく機能する(爆発前にブランク行を除去するために正規表現を使用し

Matthew 
Mark 
Luke 
John 
James 
+1

rtrim、trim、str_replace – ajreal

答えて

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

素晴らしい答え。ノーマンは配列としてデータを必要とするので、 'preg_split( '/ \ n + /'、trim($ _ POST ['textarea']))'が必要です。 – Joost

+0

@JoostK:そうだね。私のコードでは、 '$ text'と' $ text'を適切に分けるようになっています。 – BoltClock

+0

申し訳ありませんが、最後のコードブロックは機能しません。空行のために '1バイトのスペースが得られるので、' array_filter'はそれをカットしません。それを修正してください:) – Kishor

0

単純な文字列がすべきを交換トリックをする、私は信じています。 (どちら

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

$lines = explode("\n", $_POST['your_textarea']); 
foreach ($lines as $k=>$v) if(empty($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

0

、ループの空行を探し配列を、あなたの入力を分割した後、コードスニペットがテストされていない)

注:改行で分割する場合は注意してください(I splittそれらを\ nで編集しますが、クライアントブラウザがWindows上で実行されている場合は\ n \ nでも構いません)。

+2

'array_filter'はあなたがここでやっていることをまったく行います。 – Joost

関連する問題