我有一个带有文本区域的表单,我需要从输入的字符串中删除最终的多个空格和多个新行。
我写了这个函数来删除多个空格
function fix_multi_spaces($string)
{
$reg_exp = '/\s+/';
return preg_replace($reg_exp," ",$string);
}
此功能适用于空间,但它也会替换新线条,将它们更改为单个空格 我需要将多个空格更改为1个空格,将多个新行更改为1个新行 我该怎么办?
答案 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;
}