2012-04-24 77 views
3

我有一個帶有文本區域的表單,我需要從這裏輸入的字符串中刪除多個空格和多個新行。
我寫了這個功能來刪除多個空格
如何從PHP中的字符串中刪除多個空格和新行?

function fix_multi_spaces($string) 
{ 
    $reg_exp = '/\s+/'; 
    return preg_replace($reg_exp," ",$string); 
} 

此功能很好的空間,但它也更換新的線路他們改變成一個單一的空間。
我需要將多個空格更改爲1個空格,並將多個新行更改爲1個新行。
我該怎麼辦?

回答

5

使用

preg_replace('/(()+|(\\n)+)/', '$2$3', $string); 

這將爲空格和換行具體工作;如果您想要定位它們,則必須將其他空白字符(如製表符\t)添加到正則表達式中。

此正則表達式作品通過匹配一個或多個空格一個或多個新行,並用空格替換匹配(但只有當空間被匹配)換行符(但只有當換行被匹配)。

更新:結果有一些正則表達式的功能爲我不知道的情況量身定做(很多感謝craniumone空作爲評論!)。您可以或許更恰當地寫正則表達式爲

preg_replace('/(?|()+|(\\n)+)/', '$1', $string); 
+1

你也可以使用允許重複數字或'?:'不會捕獲的''|''preg_replace('/(?|()+ |(\\ n)+)/', '$ 1',$ string);'。只是一個參考,而不是批評。 http://www.php.net/manual/en/regexp.reference.subpatterns.php – craniumonempty 2012-04-24 18:48:51

+0

@craniumonempty:我不知道,謝謝。 – Jon 2012-04-25 07:59:46

-1

你知道\ S在正則表達式是所有whitepsaces,這意味着空格,換行,製表等

如果您想通過更換多個空格一個和多個換行符,您將不得不編寫函數調用preg_replace兩次 - 一次替換空格,一次替換換行符...

-1

您可以使用以下函數將多個空格和行替換爲單個空格...

function test($content_area){ 

//Newline and tab space to single space 

$content_area = str_replace(array("\r\n", "\r", "\n", "\t"), ' ', $content_area); 

// Multiple spaces to single space (using regular expression) 

$content_area = ereg_replace(" {2,}", ' ',$content_area); 

return $content_area; 

} 
相關問題