2012-04-21 12 views
27

Długość ciąg, który zawiera jedno miejsce jest zawsze równa 1:Detect String które zawierają tylko spacje

alert('My str length: ' + str.length); 

Przestrzeń jest postacią, więc:

str = " "; 
alert('My str length:' + str.length); // My str length: 3 

Jak mogę dokonać rozróżnienia między pustym ciągiem a ciągiem zawierającym tylko spacje? Jak mogę wykryć ciąg zawierający tylko spacje?

+0

Przytnij i sprawdź, czy długość wynosi zero. Czy używasz jQuery? –

+2

Usunąć wszystkie spacje i sprawdzić, czy długość ciągu wynosi "0"? Lub użyj wyrażenia regularnego, aby dopasować tylko ciągi białych znaków ... –

+1

możliwy duplikat [Jak sprawdzić, czy wejściowe pole tekstowe zawiera tylko białe spacje?] (Http://stackoverflow.com/questions/2662245/how-to-check -pozostałe-tekst-pola-zawiera-tylko-białe spacje) –

Odpowiedz

47

Aby to osiągnąć, możesz użyć wyrażenia regularnego w celu usunięcia wszystkich białych znaków w ciągu znaków. Jeśli długość wynikowego ciągu to 0, możesz być pewien, że oryginał zawiera tylko spacje. Spróbuj tego:

var str = " "; 
if (!str.replace(/\s/g, '').length) { 
    // string only contained whitespace (ie. spaces, tabs or line breaks) 
} 

Example fiddle

+0

Cóż, ciąg zawiera tylko spacje. – dwerner

4

Możesz przyciąć wartość String tworząc trymowania funkcji dla pszczół.

String.prototype.trim = function() { 
    return this.replace(/^\s*/, "").replace(/\s*$/, ""); 
} 

teraz będzie ona dostępna dla każdego kryteria wyszukiwania i można go używać jako

str.trim().length// Result will be 0 

Można również użyć tej metody, aby usunąć białe spacje na początku i na końcu łańcucha tj

" hello ".trim(); // Result will be "hello" 
+2

Przedłużanie prototypów wbudowanych obiektów to zły pomysł. – sbichenko

+0

@exizt: co jeśli użyje go tylko jego własny kod? – Shehzad

9

najszybszym rozwiązaniem byłoby przy użyciu regex funkcji prototyp test() i szuka dowolnego znaku, który nie jest przestrzeń lub linia przerwa \S:

if (/\S/.test(str)) 
{ 
    // found something other than a space or line break 
} 

Jeśli masz super długi łańcuch, może to zrobić znaczącą różnicę.

Powiązane problemy