¿Cómo detectar una cadena que contiene solo espacios?


83

Una longitud de cadena que contiene un espacio siempre es igual a 1:

alert('My str length: ' + str.length);

El espacio es un personaje, entonces:

str = "   ";
alert('My str length:' + str.length); // My str length: 3

¿Cómo puedo hacer una distinción entre una cadena vacía y una cadena que solo contiene espacios? ¿Cómo puedo detectar una cadena que solo contiene espacios?


1
Córtelo y verifique que la longitud sea cero. ¿Estás usando jQuery?
Chetter Hummin

2
Elimine todos los espacios en blanco y vea si la longitud de la cadena es 0? O use una expresión regular para hacer coincidir solo cadenas de espacios en blanco ...
Felix Kling

Respuestas:


154

Para lograr esto, puede usar una expresión regular para eliminar todos los espacios en blanco en la cadena. Si la longitud de la cadena resultante es 0, puede estar seguro de que el original solo contenía espacios en blanco. Prueba esto:

var str = "    ";
if (!str.replace(/\s/g, '').length) {
  console.log('string only contains whitespace (ie. spaces, tabs or line breaks)');
}


1
Bueno, la cadena solo contenía espacios en blanco.
dwerner

50

La solución más rápida sería usar la prueba de función de prototipo de expresiones regulares () y buscar cualquier carácter que no sea un espacio o un salto de línea \S:

if (/\S/.test(str))
{
    // found something other than a space or line break
}

En caso de que tenga una cuerda muy larga, puede marcar una diferencia significativa.


15

Similar a la respuesta de Rory, con ECMA 5 ahora puede simplemente llamar en str.trim().lengthlugar de usar una expresión regular. Si el valor resultante es 0, sabe que tiene una cadena que solo contiene espacios.

if (!str.trim().length) {
  console.log('str is empty!');
}

Puede leer más sobre recortar aquí .


2
Me gusta más esta respuesta. Muy resbaladizo. 👍
GTS Joe

3
Esta es la solución más elegante.
Gefilte Fish

11
if(!str.trim()){
  console.log('string is empty or only contains spaces');
}

Se puede eliminar el espacio en blanco de una cuerda usando String#trim().

Para verificar si una cadena es nula o indefinida, se puede verificar si la cadena en sí es falsa, en cuyo caso es nula, indefinida o una cadena vacía. Esta primera verificación es necesaria, ya que intentar invocar métodos en nullo undefinedresultará en un error. Para verificar si contiene solo espacios, se puede verificar si la cadena es falsa después de recortar, lo que significa que es una cadena vacía en ese punto.

if(!str || !str.trim()){
   //str is null, undefined, or contains only spaces
}

Esto se puede simplificar utilizando el operador de encadenamiento opcional .

if(!str?.trim()){
   //str is null, undefined, or contains only spaces
}

Si está seguro de que la variable será una cadena, solo es necesaria la segunda comprobación.

if(!str.trim()){
   console.log("str is empty or contains only spaces");
}

8

Puede recortar el valor de su cadena creando una función de recorte para sus cadenas.

String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

ahora estará disponible para cada una de sus cadenas y puede usarlo como

str.trim().length// Result will be 0

También puede utilizar este método para eliminar los espacios en blanco al principio y al final de la Cadena, es decir.

"  hello  ".trim(); // Result will be "hello"

4
Extender los prototipos de los objetos incorporados es una mala idea.
sbichenko

@exizt: ¿y si solo lo usará su propio código?
Shehzad

0

Recorta el valor de tu cadena creando una función de recorte

var text = "  ";
if($.trim(text.length == 0){
  console.log("Text is empty");
}
else
{
  console.log("Text is not empty");
}
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.