2012-04-21 17 views
27

Una longitud de cadena que contiene un espacio es siempre igual a 1:cadena de detección que sólo contienen espacios

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

El espacio es un personaje, por lo que:

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 contiene solo espacios? ¿Cómo puedo detectar una cadena que contiene solo espacios?

+0

Recortar y comprobar que la longitud es cero. ¿Estás usando jQuery? –

+2

¿Eliminar todo el espacio en blanco y ver si la longitud de la cadena es '0'? O use una expresión regular para hacer coincidir solo cadenas de espacios en blanco ... –

+1

posible duplicado de [¿Cómo comprobar si el campo de texto de entrada contiene solo espacios en blanco?] (Http://stackoverflow.com/questions/2662245/how-to-check -whether-the-input-text-field-contains-only-white-spaces) –

Respuesta

47

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

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

Example fiddle

+0

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

4

Puede recortar sus Valor de la cadena mediante la creación de una función de ajuste para sus cadenas.

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

ahora estarán disponibles para cada una de sus cuerdas y se puede utilizar 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" 
+2

Extender prototipos de objetos incorporados es una mala idea. – sbichenko

+0

@exizt: ¿y si solo será utilizado por su propio código? – Shehzad

9

la solución más rápida sería mediante la función prototipo de expresiones regulares test() y en busca de cualquier carácter que no es una ruptura espacio o línea de \S:

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

En caso de que tenga una cuerda muy larga, puede hacer una gran diferencia.

Cuestiones relacionadas