¿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.

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
}

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
}

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 *.


18

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

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

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");
}

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');

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
}

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
}

0

Esta puede ser una solución rápida

return input < "\u0020" + 1;

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.