如何从PHP中的字符串中删除多个空格和新行?

时间:2012-04-24 09:40:55

标签: php regex

我有一个带有文本区域的表单,我需要从输入的字符串中删除最终的多个空格和多个新行。
我写了这个函数来删除多个空格

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

此功能适用于空间,但它也会替换新线条,将它们更改为单个空格 我需要将多个空格更改为1个空格,将多个新行更改为1个新行 我该怎么办?

3 个答案:

答案 0 :(得分:5)

使用

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

这将专门用于空格和换行;如果你想要定位它们,你将不得不为正则表达式添加其他空白字符(例如\t标签)。

这个正则表达式的工作原理是匹配 一个或多个空格一个或多个换行符,并用空格替换匹配(但只有匹配空格时)换行符(但仅在匹配换行符时)。

更新:原来有一些针对此类案例量身定制的正则表达式功能,我不知道(非常感谢craniumonempty的评论!)。您可以更正确地编写正则表达式

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

答案 1 :(得分:-1)

你知道正则表达式中的\是适用于所有whitepsaces,这意味着空格,换行符,制表符等。

如果您想将一个和多个换行符替换为多个换行符,则必须使用该函数来调用preg_replace两次 - 一次替换空格并替换换行符...

答案 2 :(得分:-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;

}