Qual é a melhor maneira de testar uma string vazia com o jquery-of-the-box?


229

Qual é a melhor maneira de testar uma string vazia com jquery-of-the-box, ou seja, sem plugins? Eu tentei isso .

Mas não funcionou pelo menos pronto para o uso. Seria bom usar algo que está embutido.

Eu não gostaria de repetir

if (a == null || a=='')

em todos os lugares, se alguns if (isempty(a)) estariam disponíveis.



Respostas:


556
if (!a) {
  // is emtpy
}

Para ignorar o espaço em branco para seqüências de caracteres:

if (!a.trim()) {
    // is empty or whitespace
}

Se você precisar de suporte legado (IE8-) para trim(), use $.trimou um polyfill .


10
A string vazia @CoffeeAddict é falsa em javascript; portanto, sim, a expressão é avaliada como verdadeira se afor "" ou qualquer outro valor falso (nulo, falso, indefinido, 0, NaN).
9118 David Hellsing #

21
Se você também precisa combinar strings com apenas espaço em branco, é uma boa ideia usar #if (!$.trim(a))
Ilari Kajaste

3
Na minha experiência, na grande maioria das vezes que você deseja executar este teste, também deseja incluir testes para espaços em branco. Como esse é o caso usual, o OP deve incluir em sua resposta o comentário de @IlariKajaste
Bane

17
A resposta aceita irá falhar quando uma entrada de 0, no entanto ele vai trabalhar para 1, 2, 3, 4 etc.
Steven

5
Não é if (!a.trim())um pouco perigoso? E se afor indefinido ou nulo?
Timo

27

O link que você deu parece estar tentando algo diferente do teste que você está tentando evitar repetir.

if (a == null || a=='')

testa se a sequência é uma sequência vazia ou nula. O artigo ao qual você vinculou testa se a sequência consiste inteiramente em espaço em branco (ou está vazio).

O teste que você descreveu pode ser substituído por:

if (!a)

Como no javascript, uma sequência vazia e nula, ambas são avaliadas como falsas em um contexto booleano.


if(!a)não falhará para uma string que consiste em digamos 4 espaços? ``
KNU

@KNU Sim, mas a pergunta é sobre uma sequência vazia, e uma sequência composta por espaços não é uma sequência vazia. Veja o que escrevi sobre a diferença entre o que foi perguntado e o que o código vinculado faz
SpoonMeiser

Esta resposta está errada. Ele trata '0' como uma string vazia, o que não é.
John Henckel 21/10

@ JohnHenckel: Ele será tratado 0como uma string vazia, mas não "0". Presumo que foi isso que você quis dizer? É possível que isso esteja sendo usado em uma situação em que você saiba que aé uma sequência ou nula, mas sim. Algo para estar ciente.
SpoonMeiser

25

Com base na resposta de David, eu pessoalmente gosto de verificar primeiro o objeto em questão, se é uma string. Caso contrário, chamar .trim()um objeto não existente geraria uma exceção:

function isEmpty(value) {
  return typeof value == 'string' && !value.trim() || typeof value == 'undefined' || value === null;
}

Uso:

isEmpty(undefined); // true
isEmpty(null); // true
isEmpty(''); // true
isEmpty('foo'); // false
isEmpty(1); // false
isEmpty(0); // false

i verificar com <br /> <p> </ p> de textarea e disse não esvaziar como deveria
kreamik

5

Verifique se os dados são uma sequência vazia (e ignore qualquer espaço em branco) com o jQuery:

function isBlank( data ) {
    return ( $.trim(data).length == 0 );
}

5

Para verificar todos os 'vazios' como nulo, indefinido, '', '', {}, [] .

var isEmpty = function(data) {
    if(typeof(data) === 'object'){
        if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
            return true;
        }else if(!data){
            return true;
        }
        return false;
    }else if(typeof(data) === 'string'){
        if(!data.trim()){
            return true;
        }
        return false;
    }else if(typeof(data) === 'undefined'){
        return true;
    }else{
        return false;
    }
}

Casos de uso e resultados.

console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty('  ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false

3
if(!my_string){ 
// stuff 
}

e

if(my_string !== "")

se você deseja aceitar nulo, mas rejeitar vazio

EDIT: woops, esqueceu sua condição é se estiver vazio


2

Tente executar isso no console do navegador ou em um repl do node.js.

var string = ' ';
string ? true : false;
//-> true

string = '';
string ? true : false;
//-> false

Portanto, uma simples construção de ramificação será suficiente para o teste.

if(string) {
    // string is not empty
}

1
é melhor dizer "!! string" em vez de "string? true: false" ou mesmo apenas "string".
217142Preço: R $

2

Como você também pode inserir números e cadeias de caracteres fixas, a resposta deve ser:

function isBlank(value) {
  return $.trim(value);
}

Não deveria ser assim? return !!$.trim(value);
wonsuc 18/06

-1

Tente isto

if(!a || a.length === 0)

O OP declarou especificamente que eles estavam procurando uma alternativa para isso.
Wayne

-4
if((a.trim()=="")||(a=="")||(a==null))
{
    //empty condition
}
else
{
    //working condition
}

Se a é nullentão a.trim()falharia. Esta é uma má ordem para verificar as coisas. E se você alterar a ordem, sua resposta não fornecerá nada que não tenha sido sugerido antes.
Mike Scotty
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.