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.

patad
quelle

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
}
nickf
quelle
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
}
Voller Stapel
quelle
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 *.

Paul Creasey
quelle
18

Wenn Sie jQuery verwenden, ist dies einfacher.

if ($.trim(val).length === 0){
   // string is invalid
} 
Dayson
quelle
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");
}
Ian Clelland
quelle
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');
schlank
quelle
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
}
Will Strohmeier
quelle
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
}
Rajat Saxena
quelle
0

Dies kann eine schnelle Lösung sein

return input < "\u0020" + 1;
9me
quelle
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