2010-11-18 3 views
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

좋은 답변입니다. 그리고 Norman은 데이터를 배열로 필요로하기 때문에'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 \ n \ n \ n \ n \ n \ n \ n \ n \ n

+2

'array_filter'는 여기서하고있는 일을 정확히 수행합니다. – Joost

관련 문제