¿Cómo verificar si una variable es una cadena nula o vacía o todo espacio en blanco en JavaScript?

97

Necesito verificar si una variable es nula o tiene todos los espacios vacíos o simplemente está en blanco ("").

Tengo lo siguiente, pero no funciona:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}

Si hago lo siguiente, funciona:

if (addr) {

}​

Lo que necesito es algo como el método C # String.IsNullOrWhiteSpace(value).

Mascota Nate
fuente
3
¿De verdad te refieres has *any* empty spaces? ¿O te refieres is all empty spaces?
Madbreaks
1
¿qué pasa con los indefinidos?
CodeToad

Respuestas:

135

Una solución que no es jQuery que imita más de cerca IsNullOrWhiteSpace, pero para detectar nulos, vacíos o solo todos los espacios:

function isEmptyOrSpaces(str){
    return str === null || str.match(/^ *$/) !== null;
}

...luego:

var addr = '  ';

if(isEmptyOrSpaces(addr)){
    // error 
}

* EDITAR * Tenga en cuenta que op establece específicamente:

Necesito verificar si una var es nula o tiene espacios vacíos o, para el caso, solo en blanco .

Entonces, aunque sí, "espacio en blanco" abarca más que nulos, espacios o espacios en blanco, mi respuesta está destinada a responder la pregunta específica de la operación. Esto es importante porque es posible que op NO quiera capturar cosas como pestañas, por ejemplo.

Madbreaks
fuente
63
Los espacios en blanco también pueden incluir pestañas, otros tipos de espacios, etc. Úselos /^\s*$/para capturarlos también.
concesión el
2
@Grant No hice eso a propósito porque op dijo "Necesito verificar si una var es nula o tiene espacios vacíos o, para el caso, simplemente en blanco" .
Madbreaks
5
¿Qué hay de usar test () en lugar de match ()? return str === null || (/ ^ * $ /). prueba (str);
Mario Levrero
1
@MarioLevrero ¡Me gusta! testtambién es más rápido que yo recuerde.
Madbreaks
10
@Madbreaks la operación dijo "Lo que necesito es algo como este método C #: String.IsNullOrWhiteSpace". Ese método trata las pestañas como espacios en blanco.
subsci
24
if (addr == null || addr.trim() === ''){
  //...
}

Una nullcomparación también atrapará undefined. Si también quieres falseaprobar, usa !addr. Para compatibilidad con navegadores anteriores, cambie addr.trim()por $.trim(addr).

Ricardo Tomasi
fuente
1
"Si quieres que pase falso también, usa! Addr" - se descompone si addres cero.
Madbreaks
¿Por qué el primero ==y el segundo coinciden ===?
Max
19

Puedes usar if(addr && (addr = $.trim(addr)))

Esto tiene la ventaja de eliminar cualquier espacio en blanco externo en addrlugar de simplemente ignorarlo al realizar la verificación.

Referencia: http://api.jquery.com/jQuery.trim/

ThiefMaster
fuente
2
Suponiendo, por supuesto, que el operador quiera eliminar el espacio en blanco. :)
Madbreaks
1
Su respuesta devolverá un falso positivo si addrse inicializa con, por ejemplo, un número entero.
Madbreaks
Sin más información, supongo que la var es siempre una cadena si no es nula / indefinida.
ThiefMaster
1
Op dijo "comprobar si una variable ...", y su ejemplo mostró que la variable es una cadena, pero supongo que es solo un ejemplo para demostrar la idea.
Madbreaks
5
isEmptyOrSpaces(str){
    return !str || str.trim() === '';
}
Ali
fuente
2
¿Es necesario duplicar las respuestas existentes? ¿O ha cambiado algo en las respuestas anteriores que marque una diferencia relevante?
Nico Haase
4

Puede crear su propio método Equivalente a

String.IsNullOrWhiteSpace(value)

function IsNullOrWhiteSpace( value) {

    if (value== null) return true;

    return value.replace(/\s/g, '').length == 0;
}
Shehzad
fuente
1
\scoincide con más que solo espacios
Madbreaks
4

Antigua pregunta, pero creo que merece una respuesta más sencilla.

Simplemente puede hacer:

var addr = "  ";

if (addr && addr.trim()) {

    console.log("I'm not null, nor undefined, nor empty string, nor string composed of whitespace only.");

}
sandre89
fuente
1
¿No debería serlo addr && addr.trim()? Con un sencillo &no me funcionó, pero sí con &&.
markv12
3

Al buscar espacios en blanco, el método c # usa el estándar Unicode. Los espacios en blanco incluyen espacios, tabulaciones, retornos de carro y muchos otros códigos de caracteres que no se imprimen. Entonces es mejor usar:

function isNullOrWhiteSpace(str){
    return str == null || str.replace(/\s/g, '').length < 1;
}
Joao Leme
fuente
Op establece explícitamente que el objetivo es buscar espacios , no espacios en blanco.
Madbreaks
5
Op dice "Lo que necesito es algo como este método de C #: String.IsNullOrWhiteSpace (valor)". Y si solo está buscando espacios, no nombre su función isNullOrWhiteSpace sino que la llame IsNullOrEmtpy.
Joao Leme
El método C # funcionaría para verificar si una cadena era nula o una serie de espacios. Op quería algo "así", pero para comprobar específicamente los espacios.
Madbreaks
0

Probar esto

/**
  * Checks the string if undefined, null, not typeof string, empty or space(s)
  * @param {any} str string to be evaluated
  * @returns {boolean} the evaluated result
*/
function isStringNullOrWhiteSpace(str) {
    return str === undefined || str === null
                             || typeof str !== 'string'
                             || str.match(/^ *$/) !== null;
}

Puedes usarlo así

isStringNullOrWhiteSpace('Your String');
Rod lauro Romarate
fuente
0
isEmptyOrSpaces(str){
    return str === null || str.trim().length>0;
}
Thalinda Bandara
fuente
0
function isEmptyOrSpaces(str){
    return str === null || str.match(/^[\s\n\r]*$/) !== null;
}
pico
fuente
0

Puedes probar esto:

do {
   var op = prompt("please input operatot \n you most select one of * - / *  ")
} while (typeof op == "object" || op == ""); 
// execute block of code when click on cancle or ok whthout input
hamedalavi
fuente