Wie kann ich überprüfen, ob die Zeichenfolge Zeichen und Leerzeichen enthält, nicht nur Leerzeichen?


134

Wie kann am besten überprüft werden, ob eine Zeichenfolge nur Leerzeichen enthält?

Die Zeichenfolge darf Zeichen enthalten, die mit Leerzeichen kombiniert sind , aber nicht nur Leerzeichen.

Antworten:


293

Statt die gesamte Zeichenfolge zu überprüfen , um zu sehen , ob es nur Leerzeichen ist, überprüft nur um zu sehen , ob es zumindest ist ein Zeichen von nicht Leerzeichen:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

7
Seien Sie vorsichtig mit myString, um einen Nullwert zu erhalten. Es wird true zurückgeben: /\S/.test(null) == true
Dilshod Tadjibaev

6
Viele dieser Antworten enthalten Regex! Bedeutet dies, dass es in js keine native Möglichkeit gibt, etwas zu erkennen? Gibt es keine Zeichenfolge.IsWhitespace oder so? Gibt es auch keine native Trimmung?
JonnyRaa

4
@JonnyLeeds Da Regex sogar Syntaxunterstützung in js hat, könnte man sagen, dass es tatsächlich nativer ist als alle ausgelieferten Dienstprogrammmethoden;)
Ricardo van den Broek

38

Einfachste Antwort, wenn Ihr Browser die trim()Funktion unterstützt

if (myString && !myString.trim()) {
    //First condition to check if string is not empty
    //Second condition checks if string contains just whitespace
}

Wenn IE 8 heutzutage RIP ist, ist dies die sauberste und effizienteste Lösung in Bezug auf die Leistung, basierend auf der nativen Implementierung. Und es funktioniert korrekt mit Registerkarten und neuen Zeilen.
Alexander Abakumov

35
if (/^\s+$/.test(myString))
{
      //string contains only whitespace
}

Dadurch wird nach 1 oder mehr Leerzeichen gesucht. Wenn Sie auch eine leere Zeichenfolge verwenden möchten, ersetzen Sie diese +durch *.


18

Wenn Sie jQuery verwenden, ist dies einfacher.

if ($.trim(val).length === 0){
   // string is invalid
} 

1
Funktioniert auch für Zeilenumbrüche und Tabulatoren, während die obigen Regex-Beispiele dies nicht tun, da sie nur nach dem Fehlen von etwas anderem als Leerzeichen suchen. Ich bin mir jedoch sicher, dass jemand mit Regex-Kenntnissen einen Regex erstellen könnte, der auch Tabulatoren / Zeilenumbrüche in die Suche einbezieht.
Kate

funktioniert nicht, wenn val Leerzeichen zugewiesen sind, in meinem Fall vier Leerzeichen.
user1451111

7

Überprüfen Sie einfach die Zeichenfolge anhand dieses regulären Ausdrucks:

if(mystring.match(/^\s+$/) === null) {
    alert("String is good");
} else {
    alert("String contains only whitespace");
}

1
Die Art und Weise, wie ich die Frage lese, besagt, dass / any / whitespace erlaubt ist, solange die Zeichenfolge nicht / only / whitespace ist. Es ist still darüber, was zu tun ist, wenn die Zeichenfolge leer ist. Daher ist die Antwort von Nickf möglicherweise noch besser.
Ian Clelland

1
if (!myString.replace(/^\s+|\s+$/g,""))
  alert('string is only whitespace');

0

Der reguläre Ausdruck, den ich letztendlich verwendet habe, wenn ich Leerzeichen in der Mitte meiner Zeichenfolge zulassen möchte, aber nicht am Anfang oder Ende, war folgender:

[\S]+(\s[\S]+)*

oder

^[\S]+(\s[\S]+)*$

Ich weiß, dass dies eine alte Frage ist, aber Sie könnten so etwas tun:

if (/^\s+$/.test(myString)) {
    //string contains characters and white spaces
}

oder du kannst tun, was nickf gesagt hat und verwenden:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

0

Ich habe die folgende Methode verwendet, um festzustellen, ob eine Zeichenfolge nur Leerzeichen enthält. Es stimmt auch mit leeren Zeichenfolgen überein.

if (/^\s*$/.test(myStr)) {
  // the string contains only whitespace
}

0

Dies kann eine schnelle Lösung sein

return input < "\u0020" + 1;

Das macht nur return input < " 1"; Was macht nur alphabetische Vergleiche. Solange die Eingabe niedriger als "1" sortiert ist, wird true zurückgegeben. Beispiel: return " asdfv34562345" < "\u0020" + 1;ergibt true.
Derek Ziemba
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.