Qual è il modo migliore per testare una stringa vuota con jquery out-of-the-box?


229

Qual è il modo migliore per testare una stringa vuota con jquery out-of-the-box, cioè senza plugin? Ho provato questo .

Ma non ha funzionato almeno immediatamente. Sarebbe bello usare qualcosa che è incorporato.

Non vorrei ripetere

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

ovunque se qualcuno if (isempty(a)) fosse disponibile.



Risposte:


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

Per ignorare lo spazio bianco per le stringhe:

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

Se è necessario il supporto legacy (IE8-) per trim(), utilizzare $.trimo un polyfill .


10
@CoffeeAddict stringa vuota è errata in javascript, quindi sì, l'espressione viene valutata vera se aè "" o qualsiasi altro valore di falsa (null, false, undefined, 0, NaN).
David Hellsing

21
Se devi abbinare anche le stringhe con solo spazi bianchi, è una buona idea usareif (!$.trim(a))
Ilari Kajaste

3
Nella mia esperienza, la stragrande maggioranza delle volte che si desidera eseguire questo test, si desidera includere anche i test per gli spazi bianchi. Poiché questo è il solito caso, OP dovrebbe includere nella sua risposta il commento di @IlariKajaste
Bane,

17
La risposta accettata avrà esito negativo quando si inserisce uno 0, tuttavia funzionerà per 1, 2, 3, 4 ecc.
Steven

5
Non è if (!a.trim())un po 'pericoloso? Cosa succede se aè indefinito o nullo?
Timo

27

Il link che hai dato sembra tentare qualcosa di diverso dal test che stai cercando di evitare di ripetere.

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

verifica se la stringa è vuota o nulla. L'articolo che hai collegato ai test se la stringa è interamente costituita da spazi bianchi (o è vuota).

Il test che hai descritto può essere sostituito da:

if (!a)

Perché in javascript, una stringa vuota e null, entrambi valutano false in un contesto booleano.


if(!a)non fallirà per una stringa composta da diciamo 4 spazi? ``
KNU,

@KNU Sì, ma la domanda pone una stringa vuota e una stringa composta da spazi non è una stringa vuota. Vedi cosa ho scritto sulla differenza tra ciò che è stato chiesto e ciò che fa il codice collegato
SpoonMeiser

Questa risposta è sbagliata Tratta '0' come una stringa vuota, che non lo è.
John Henckel,

@JohnHenckel: Tratterà 0come una stringa vuota, ma non "0". Immagino sia quello che volevi dire? È ipotizzabile che questo venga utilizzato in una situazione in cui sai che aè una stringa o nulla, ma sì. Qualcosa di cui essere consapevoli.
SpoonMeiser,

25

Sulla base della risposta di David, personalmente mi piace controllare prima l'oggetto dato se è una stringa. Altrimenti, la chiamata .trim()a un oggetto non esistente genererebbe un'eccezione:

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

controllo con <br /> <p> </p> da textarea e ha detto non vuoto come dovrebbe
kreamik

5

Controlla se i dati sono una stringa vuota (e ignora qualsiasi spazio bianco) con jQuery:

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

5

Per verificare la presenza di tutti i 'vuoti' come null, undefined, '', '', {}, [] .

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

Usa casi e risultati.

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 si desidera accettare null ma rifiutare vuoto

EDIT: woops, ho dimenticato la tua condizione è se è vuota


2

Prova a eseguirlo nella console del tuo browser o in un sostituto node.js.

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

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

Pertanto, un semplice costrutto di ramificazione sarà sufficiente per il test.

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

1
è meglio dire "!! string" invece di "string? true: false" o anche solo "string".
ア レ ッ ク ス

2

Poiché puoi anche inserire numeri e stringhe di tipi fissi, la risposta dovrebbe essere effettivamente:

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

Non dovrebbe essere così? return !!$.trim(value);
Wonsuc,

-1

Prova questo

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

L'OP ha affermato specificamente che stanno cercando un'alternativa a questo.
Wayne,

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

Se a è nullallora a.trim()fallirebbe. Questo è un cattivo ordine per controllare le cose. E se si modifica l'ordine, la risposta non fornisce nulla, che non è stato suggerito prima.
Mike Scotty,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.