Como verificar se uma variável é nula ou string vazia ou todos os espaços em branco em JavaScript?

95

Preciso verificar se uma variável é nula ou tem todos os espaços vazios ou está apenas em branco ("").

Tenho o seguinte, mas não está funcionando:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}

Se eu fizer o seguinte, funcionará:

if (addr) {

}​

O que eu preciso é algo como o método C # String.IsNullOrWhiteSpace(value).

Nate Pet
fonte
3
Você realmente quer dizer has *any* empty spaces? Ou você quer dizer is all empty spaces?
Madbreaks de
1
que tal indefinido?
CodeToad

Respostas:

135

Uma solução não jQuery que imita mais de perto IsNullOrWhiteSpace, mas para detectar nulos, vazios ou apenas espaços:

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

...então:

var addr = '  ';

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

* EDITAR * Observe que op afirma especificamente:

Preciso verificar se um var é nulo ou tem espaços vazios ou apenas em branco .

Portanto, embora sim, "espaço em branco" abrange mais do que nulo, espaços ou em branco, minha resposta pretende responder à pergunta específica de op. Isso é importante porque op pode NÃO querer pegar coisas como tabs, por exemplo.

Madbreaks
fonte
62
Os espaços em branco também podem incluir guias, outros tipos de espaços, etc. Use /^\s*$/para pegá-los também.
concessão em
2
@Grant Eu propositalmente NÃO fiz isso porque op disse "Eu preciso verificar se uma var é nula ou tem espaços vazios ou apenas em branco" .
Madbreaks
4
Que tal usar test () em vez de match ()? return str === null || (/ ^ * $ /). teste (str);
Mario Levrero
1
@MarioLevrero Gosto disso! testtambém é mais rápido, se bem me lembro.
Madbreaks
9
@Madbreaks the op declarou "O que eu preciso é algo como este método C #: String.IsNullOrWhiteSpace". Esse método trata as guias como espaços em branco.
subsci
24
if (addr == null || addr.trim() === ''){
  //...
}

Uma nullcomparação também pegará undefined. Se quiser falsepassar também, use !addr. Para troca de compatibilidade com versões anteriores do navegador addr.trim()para $.trim(addr).

Ricardo Tomasi
fonte
1
"Se você quiser que false passe também, use! Addr" - decompõe se addrfor zero.
Madbreaks de
19

Você pode usar if(addr && (addr = $.trim(addr)))

Isso tem a vantagem de realmente remover qualquer espaço em branco externo em addrvez de simplesmente ignorá-lo ao realizar a verificação.

Referência: http://api.jquery.com/jQuery.trim/

ThiefMaster
fonte
2
Supondo que, é claro, o op queira remover os espaços em branco. :)
Madbreaks
1
Sua resposta retornará um falso positivo se addrfor inicializada com, por exemplo, um inteiro.
Madbreaks de
Sem mais informações, presumo que var é sempre uma string, se não for nulo / indefinido.
ThiefMaster
1
Op disse "verifique se uma variável ...", e seu exemplo mostrou que a variável é uma string, mas eu assumiria que isso é apenas um exemplo para demonstrar a ideia.
Madbreaks
6
isEmptyOrSpaces(str){
    return !str || str.trim() === '';
}
Todos
fonte
Existe alguma necessidade de duplicar as respostas existentes? Ou você mudou alguma coisa nas respostas anteriores que faz uma diferença relevante?
Nico Haase
4

Você pode criar seu próprio método equivalente a

String.IsNullOrWhiteSpace(value)

function IsNullOrWhiteSpace( value) {

    if (value== null) return true;

    return value.replace(/\s/g, '').length == 0;
}
Shehzad
fonte
1
\scorresponde a mais do que apenas espaços
Madbreaks
4

Pergunta antiga, mas acho que merece uma resposta mais simples.

Você pode simplesmente fazer:

var addr = "  ";

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

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

}
sandre89
fonte
1
Não deveria ser addr && addr.trim()? Com um único &não funcionou para mim, mas funciona com &&.
markv12
@ markv12 corrigido, obrigado
sandre89
3

Ao verificar o espaço em branco, o método c # usa o padrão Unicode. O espaço em branco inclui espaços, tabulações, retornos de carro e muitos outros códigos de caracteres não imprimíveis. Portanto, é melhor usar:

function isNullOrWhiteSpace(str){
    return str == null || str.replace(/\s/g, '').length < 1;
}
Joao leme
fonte
Op afirma explicitamente que o objetivo é verificar se há espaços , não espaços em branco.
Madbreaks de
5
Op diz "O que eu preciso é algo como este método C #: String.IsNullOrWhiteSpace (value)". E se você estiver apenas verificando espaços, não chame sua função de isNullOrWhiteSpace, mas sim de IsNullOrEmtpy.
João Leme
O método C # funcionaria para verificar se uma string era nula ou uma série de espaços. Op queria algo "assim", mas para verificar especificamente os espaços.
Madbreaks
0

Experimente isto

/**
  * 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;
}

Você pode usar assim

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

Você pode tentar isto:

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
fonte