2014-07-04 21 views
9

Ich möchte zusätzliche Leerzeichen in meiner Zeichenfolge entfernen. Ich habe versucht trim, ltrim, rtrim und andere, aber keine von ihnen funktionieren und probierten sogar die folgenden Sachen.Entfernen Sie zusätzliche Leerzeichen, aber nicht Leerzeichen zwischen zwei Wörtern

//This removes all the spaces even the space between the words 
// which i want to be kept 
$new_string = preg_replace('/\s/u', '', $old_string); 

Gibt es eine Lösung dafür?

Aktualisiert: -

Eingang String: -

" 
Hello Welcome 
          to India " 

Output String: -

"Hello Welcome to India" 
+1

Sie Ihre Daten geben? – Sadikhasan

+1

Geben Sie einige Beispiele von dem, was Sie erreichen möchten (Zeichenfolge, von der Sie beginnen, Zeichenfolge, die Sie erhalten möchten) – clami219

+0

Trim sollte gut gehen. Allerdings, wenn Sie Regex verwenden möchten, können Sie versuchen, diese '^ \ s * | \ s * $ –

Antwort

14
$cleanStr = trim(preg_replace('/\s\s+/', ' ', str_replace("\n", " ", $str))); 
+1

Perfekt funktioniert gut. Danke –

2

Wenn Sie mehrere Räume innerhalb einer Zeichenfolge entfernen, sollten Sie die folgenden verwenden:

$testStr = "     Hello Welcome 
         to India "; 
$ro = trim(preg_replace('/\s+/', ' ', $testStr)); 
+0

OP möchte keine Leerzeichen irgendwo außer dem Anfang/Ende der Zeichenfolge entfernen. –

+0

OP möchte zusätzliche Leerzeichen in der Mitte der Zeichenfolge entfernen. – VMai

+0

Nein funktioniert nicht –

1

Ich denke, was wir hier tun sollen, sollten wir nicht nach 1 Raum suchen, wir sollten nach zwei aufeinanderfolgenden Räumen suchen und dann eins machen. So würde es den Platz zwischen dem Text nicht ersetzen und auch keinen anderen Platz entfernen.

$new_string= str_replace(' ', ' ', $old_string)

für mehr auf Str Replace

5

OK, so dass Sie alle Leerzeichen am Ende der Zeichenfolge und Überschuss Leerzeichen zwischen den Wörtern trimmen wollen.

Sie können mit einem einzigen Regex tun:

$result = preg_replace('/^\s+|\s+$|\s+(?=\s)/', '', $subject); 

Erläuterung:

^\s+  # Match whitespace at the start of the string 
|   # or 
\s+$  # Match whitespace at the end of the string 
|   # or 
\s+(?=\s) # Match whitespace if followed by another whitespace character 

wie dieses (Beispiel in Python, weil ich nicht PHP verwenden):

>>> re.sub(r"^\s+|\s+$|\s+(?=\s)", "", " Hello\n and welcome to India ") 
'Hello and welcome to India' 
+0

das scheint nicht Räume zu entfernen erstellt von   – DragonFire

+0

@DragonFire: Wenn Sie die Regex auf den Quellcode anwenden, dann ja - ' ' ist kein Leerzeichen, weder wäre '% 20' oder' 0x20' etc . –

0

Wenn Sie einzelnen Platz zwischen Wort entfernen. es versuchen diese

trim(str_replace(' ','','hello word'));

0

Versuchen Sie, wird dies auch alle & nbsp entfernen

$node3 = htmlentities($node3, null, 'utf-8'); 
$node3 = str_replace(" ", "", $node3); 
$node3 = html_entity_decode($node3); 

$node3 = preg_replace('/^\s+|\s+$|\s+(?=\s)/', '', $node3); 
Verwandte Themen