Wie erkennt man einen String, der nur Leerzeichen enthält?

80

Eine Zeichenfolgenlänge, die ein Leerzeichen enthält, ist immer gleich 1:

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

Der Raum ist ein Charakter, also:

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

Wie kann ich zwischen einer leeren Zeichenfolge und einer Zeichenfolge unterscheiden, die nur Leerzeichen enthält? Wie kann ich eine Zeichenfolge erkennen, die nur Leerzeichen enthält?

Luca
quelle
1
Schneiden Sie es und überprüfen Sie, ob die Länge Null ist. Verwenden Sie jQuery?
Chetter Hummin
2
Entfernen Sie alle Leerzeichen und prüfen Sie, ob die Zeichenfolgenlänge gleich ist 0. Oder verwenden Sie einen regulären Ausdruck, um nur Whitespace-Zeichenfolgen abzugleichen ...
Felix Kling

Antworten:

150

Um dies zu erreichen, können Sie einen regulären Ausdruck verwenden, um alle Leerzeichen in der Zeichenfolge zu entfernen. Wenn die Länge der resultierenden Zeichenfolge gleich ist 0, können Sie sicher sein, dass das Original nur Leerzeichen enthält. Versuche dies:

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

Rory McCrossan
quelle
1
Nun, String enthielt nur Leerzeichen.
Dwerner
49

Die schnellste Lösung wäre die Verwendung des Regex-Prototyp-Funktionstests () und die Suche nach Zeichen, bei denen es sich nicht um Leerzeichen oder Zeilenumbrüche handelt \S:

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

Wenn Sie eine super lange Saite haben, kann dies einen signifikanten Unterschied machen.

pmrotule
quelle
11

Ähnlich wie bei Rorys Antwort können Sie mit ECMA 5 jetzt einfach anrufen, str.trim().lengthanstatt einen regulären Ausdruck zu verwenden. Wenn der resultierende Wert 0 ist, wissen Sie, dass Sie eine Zeichenfolge haben, die nur Leerzeichen enthält.

if (!str.trim().length) {
  console.log('str is empty!');
}

Weitere Informationen zum Trimmen finden Sie hier .

bobbyg603
quelle
1
Diese Antwort gefällt mir am besten. Sehr glatt. 👍
GTS Joe
1
Dies ist die eleganteste Lösung.
Gefilte Fish
9

Das Entfernen des Leerzeichens aus einer Zeichenfolge kann mithilfe von erfolgen String.trim().

Um zu überprüfen, ob eine Zeichenfolge null oder undefiniert ist, können Sie überprüfen, ob die Zeichenfolge selbst falsch ist. In diesem Fall ist sie null, undefiniert oder eine leere Zeichenfolge. Diese erste Prüfung ist notwendig, da versucht , auf Methoden aufzurufen nulloder undefinedzu einem Fehler führen. Um zu überprüfen, ob es nur Leerzeichen enthält, kann nach dem Zuschneiden überprüft werden, ob die Zeichenfolge falsch ist. Dies bedeutet, dass es sich zu diesem Zeitpunkt um eine leere Zeichenfolge handelt.

if(!str || !str.trim()){
   //str is null, undefined, or contains only spaces
}

Wenn Sie sicher sind, dass die Variable eine Zeichenfolge ist, ist nur die zweite Überprüfung erforderlich.

if(!str.trim()){
   console.log("str is empty or contains only spaces");
}
Jota
quelle
8

Sie können Ihren String-Wert kürzen, indem Sie eine Trimmfunktion für Ihre Strings erstellen.

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

Jetzt ist es für jeden String verfügbar und Sie können es als verwenden

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

Sie können diese Methode auch verwenden, um die Leerzeichen am Anfang und Ende des Strings zu entfernen, d. H.

"  hello  ".trim(); // Result will be "hello"
Shehzad
quelle
4
Das Erweitern der Prototypen eingebauter Objekte ist eine schlechte Idee.
Sbichenko
@exizt: Was ist, wenn es nur von seinem eigenen Code verwendet wird?
Shehzad
0

Trimmen Sie Ihren String-Wert, indem Sie eine Trimmfunktion erstellen

var text = "  ";
if($.trim(text.length == 0){
  console.log("Text is empty");
}
else
{
  console.log("Text is not empty");
}
user3024615
quelle