4

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

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

此功能适用于空格,但它也替换了将它们更改为单个空格的新行。
我需要将多个空格更改为 1 个空格,将多个新行更改为 1 个新行。
我能怎么做?

4

3 回答 3

6

利用

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

这将专门用于空格和换行符;\t如果您还想定位它们,则必须将其他空白字符(例如制表符)添加到正则表达式。

此正则表达式通过匹配一个多个空格一个或多个换行符并将匹配替换为空格(但仅在匹配空格时)换行符(但仅在匹配换行符时)来工作。

更新:原来有一些为我不知道的情况量身定制的正则表达式功能(非常感谢 craniumonempty 的评论!)。您可以将正则表达式编写为

preg_replace('/(?|( )+|(\\n)+)/', '$1', $string);
于 2012-04-24T09:43:18.247 回答
-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;

}
于 2012-04-24T10:35:32.730 回答
-1

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

如果您想用一个替换多个空格并用一个替换多个换行符,则必须重新编写函数以调用 preg_replace 两次-一次替换空格,一次替换换行符...

于 2012-04-24T09:45:07.733 回答