user3188287
user3188287

Reputation: 31

How to remove more than one whitespace

Hello guys I currently have a problem with my preg_replace :

preg_replace('#[^a-zA-z\s]#', '', $string)

It keeps all alphabetic letters and white spaces but I want more than one white space to be reduced to only one. Any idea how this can be done ?

Upvotes: 1

Views: 167

Answers (5)

Toto
Toto

Reputation: 2450

Question is old and miss some details. Let's assume OP wanted to reduce all consecutive horizontal whitespaces and replace by a space.

Exemple:

"\t\t \t  \t" => " "
"\t\t   \t\t" => "\t \t"

One possible solution would be simply to use the generic character type \h which stands for horizontal whitespace space:

preg_replace('/\h+/', ' ', $text)

Upvotes: 0

Sharanya Dutta
Sharanya Dutta

Reputation: 4021

The character type \s stands for five different characters: horizontal tab (9), line feed (10), form feed (12), carriage return (13) and ordinary space (32). The following code will find every substring of $string which is composed entirely of \s. Only the first \s in the substring will be preserved. For example, if line feed, horizontal tab and ordinary space occur immediately after one another in a substring, line feed alone will remain after the replacement is done.

$string = preg_replace('#(\s)\s+#', '\1', $string);

Upvotes: 1

Jorge Y. C. Rodriguez
Jorge Y. C. Rodriguez

Reputation: 3449

try using trim instead

<?php
$something = "   Error";
echo $something."\n";
echo "------"."\n";
echo trim($something);
?>

output

  Error
------
Error

Upvotes: 0

Furquan Khan
Furquan Khan

Reputation: 1594

$output = preg_replace('!\s+!', ' ', $input);

From Regular Expression Basic Syntax Reference

\d, \w and \s

Shorthand character classes matching digits, word characters (letters, digits, and underscores), and whitespace (spaces, tabs, and line breaks). Can be used inside and outside character classes.

Upvotes: 2

mr. Pavlikov
mr. Pavlikov

Reputation: 1012

preg_replace(array('#\s+#', '#[^a-zA-z\s]#'), array(' ', ''), $string);

Though it will replace all of whitespaces with spaces. If you want to replace consequent whitespaces (like two newlines with only one newline) - you should figure out logic for that, coz \s+ will match "\n \n \n" (5 whitespaces in a row).

Upvotes: 0

Related Questions