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

Luca
fuente
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)');
}

Rory McCrossan
fuente
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.

pmrotule
fuente
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í .

bobbyg603
fuente
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");
}
iota
fuente
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"
Shehzad
fuente
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");
}
user3024615
fuente