¿Cómo puedo verificar si la cadena contiene caracteres y espacios en blanco, no solo espacios en blanco?

134

¿Cuál es la mejor manera de verificar si una cadena contiene solo espacios en blanco?

La cadena puede contener caracteres combinados con espacios en blanco, pero no solo espacios en blanco.

patad
fuente

Respuestas:

294

En lugar de verificar toda la cadena para ver si sólo hay un espacio en blanco, simplemente comprobar para ver si hay al menos un carácter de no espacios en blanco:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}
nickf
fuente
77
Solo tenga cuidado con myString para que sea un valor nulo. Volverá verdadero: /\S/.test(null) == verdadero
Dilshod Tadjibaev
66
¡Muchas de estas respuestas tienen expresiones regulares en ellas! ¿Esto significa que no hay una forma nativa de detectar cosas en js? ¿No hay cadena. ¿Es WhiteSpace o algo así? ¿No hay recorte nativo tampoco?
JonnyRaa
44
@JonnyLeeds Dado que regex incluso tiene soporte de sintaxis en js, se podría decir que en realidad es más nativo que cualquier método de utilidad enviado;)
Ricardo van den Broek
38

La respuesta más simple si su navegador admite la trim()función

if (myString && !myString.trim()) {
    //First condition to check if string is not empty
    //Second condition checks if string contains just whitespace
}
Completa pila
fuente
Hoy en día, cuando IE 8 es RIP, esta es la solución más limpia y eficiente en cuanto al rendimiento, confiando en la implementación nativa. Y funciona correctamente con pestañas y nuevas líneas.
Alexander Abakumov
35
if (/^\s+$/.test(myString))
{
      //string contains only whitespace
}

esto busca 1 o más caracteres de espacio en blanco, si también coincide con una cadena vacía, reemplácela +con *.

Paul Creasey
fuente
18

Bueno, si estás usando jQuery, es más simple.

if ($.trim(val).length === 0){
   // string is invalid
} 
Dayson
fuente
1
También funciona para nueva línea y tabulación, mientras que los ejemplos de expresiones regulares anteriores no lo hacen, ya que solo buscan la ausencia de cualquier cosa que no sea espacio en blanco. Sin embargo, estoy seguro de que alguien con algún conocimiento de expresiones regulares podría crear una expresión regular que también incluiría tabulación / nueva línea en la búsqueda.
Kate
no funciona cuando val tiene espacios asignados, en mi caso cuatro espacios.
user1451111
7

Simplemente verifique la cadena contra esta expresión regular:

if(mystring.match(/^\s+$/) === null) {
    alert("String is good");
} else {
    alert("String contains only whitespace");
}
Ian Clelland
fuente
1
La forma en que leo la pregunta dice que / any / whitespace está permitido, siempre que la cadena no sea / only / whitespace. No dice qué hacer si la cadena está vacía, por lo que puede ser que la respuesta de nickf sea aún mejor.
Ian Clelland
1
if (!myString.replace(/^\s+|\s+$/g,""))
  alert('string is only whitespace');
Delgado
fuente
0

La expresión regular que terminé usando para cuando quiero permitir espacios en el medio de mi cadena, pero no al principio o al final fue esta:

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

o

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

Entonces, sé que esta es una vieja pregunta, pero podrías hacer algo como:

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

o puedes hacer lo que nickf dijo y usar:

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

He usado el siguiente método para detectar si una cadena contiene solo espacios en blanco. También coincide con cadenas vacías.

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

Esta puede ser una solución rápida

return input < "\u0020" + 1;
9me
fuente
Eso es solo hacer return input < " 1"; Lo que es hacer una comparación alfabética. Mientras la entrada se clasifique por debajo de "1", devolverá verdadero. Ejemplo: se return " asdfv34562345" < "\u0020" + 1;evalúa como verdadero.
Derek Ziemba