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.