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).


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.


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).


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/


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() === '';
}

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

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.");

}

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

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');


0
function isEmptyOrSpaces(str){
    return str === null || str.match(/^[\s\n\r]*$/) !== null;
}

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.