2012-04-24 75 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; 

} 
相关问题