2012-01-18 49 views
3

我有一個textarea,用戶可以在PHP中提交文章。例如,我想檢查一行中的換行數並在必要時減少它。PHP合併行中的換行數並在必要時減少它?

ORIGINAL:

Hello\n 
\n\n\n\n\n\n\n\n\n\n\n\n\n 
Goodbye 

我想到底:

Hello\n 
\n 
Goodbye 

所以基本上我想在一排一個最多2個換行符。 我如何在PHP中實現這一點?

感謝您的任何幫助。

回答

7

PCRE:

preg_replace('/\n{3,}/m', "\n\n", $text); 
+1

在這種情況下M修飾符會做什麼?它不是隻用於badaries嗎? – 2012-01-18 16:53:37

+0

你是對的; 'm'修飾符是沒有必要的。 – 2012-01-18 17:05:37

1

我會做一個循環替換

$data = "Hello\n\n\n\n\n\n\n\n\n\n\n\n\nGoodbye"; 
while(($newdata = str_replace("\n\n\n", "\n\n", $data) != $data){ 
    $data = $newdata; 
} 

這將取代3 \ n 2 \ n只要有可能。

請記住,您可能需要將\ r全部替換爲\ n,因爲您的輸入永遠不會完美。這也沒有考慮到\ n之間的空格的可能性。

0

要添加到tandu的響應,該變型中佔回車符號,以及:

preg_replace(array('/\r/m','/\n{3,}/m'), array("\n","\n\n"), $text); 

首先轉換\r「s到\n的以便\r\n序列被還原成\n\n。然後順序\n的過濾器完成工作。