Come posso verificare se la stringa contiene caratteri e spazi bianchi, non solo spazi bianchi?


134

Qual è il modo migliore per verificare se una stringa contiene solo spazi bianchi?

La stringa può contenere caratteri combinati con spazi bianchi, ma non solo spazi bianchi.

Risposte:


294

Invece di controllare l'intera stringa per vedere se c'è solo spazio, controlla solo se c'è almeno un carattere di spazio non bianco:

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

7
Fai solo attenzione a myString per essere un valore nullo. Restituirà true: /\S/.test(null) == true
Dilshod Tadjibaev,

6
molte di queste risposte hanno regex in esse! Questo significa che non esiste un modo nativo per rilevare le cose in js? non c'è stringa.IsWhitespace o qualcosa del genere? Non c'è nemmeno un assetto nativo?
JonnyRaa,

4
@JonnyLeeds Dato che regex ha anche il supporto della sintassi in js, si potrebbe dire che in realtà è più nativo di qualsiasi metodo di utilità fornito;)
Ricardo van den Broek,

38

Risposta più semplice se il browser supporta la trim()funzione

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

Oggigiorno, quando IE 8 è RIP, questa è la soluzione più pulita ed efficiente dal punto di vista delle prestazioni, basata sull'implementazione nativa. E funziona correttamente con schede e nuove linee.
Alexander Abakumov,

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

questo controlla 1 o più caratteri di spazi bianchi, se si deve anche abbinare una stringa vuota, sostituire +con *.


18

Bene, se stai usando jQuery, è più semplice.

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

1
Funziona anche per newline e tab, mentre gli esempi di regex sopra non lo fanno perché stanno solo cercando l'assenza di nient'altro che di uno spazio bianco. Tuttavia, sono sicuro che qualcuno con una certa conoscenza di regex potrebbe creare una regex che includerebbe anche tab / newline nella ricerca.
Kate,

non funziona quando a val vengono assegnati spazi, nel mio caso quattro spazi.
user1451111

7

Basta controllare la stringa con questo regex:

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

1
Il modo in cui ho letto la domanda dice che è consentito / any / whitespace, purché la stringa non sia / only / whitespace. Non si dice cosa fare se la stringa è vuota, quindi potrebbe essere che la risposta di Nickf sia ancora migliore.
Ian Clelland,

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

0

L'espressione regolare che ho usato per quando voglio consentire spazi nel mezzo della mia stringa, ma non all'inizio o alla fine era questa:

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

o

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

Quindi, so che questa è una vecchia domanda, ma potresti fare qualcosa del tipo:

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

oppure puoi fare quello che ha detto Nickf e usare:

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

0

Ho usato il seguente metodo per rilevare se una stringa contiene solo spazi bianchi. Corrisponde anche a stringhe vuote.

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

0

Questa può essere una soluzione veloce

return input < "\u0020" + 1;

Questo è solo fare return input < " 1"; Che sta solo facendo un confronto alfabetico. Fintanto che l'input viene ordinato più in basso di "1", restituirà true. Esempio: return " asdfv34562345" < "\u0020" + 1;restituisce vero.
Derek Ziemba,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.