Jaki jest najlepszy sposób testowania pustego ciągu za pomocą jquery-out-of-the-box?

229

Jaki jest najlepszy sposób testowania pustego ciągu za pomocą jquery-out-of-the-box, tj. Bez wtyczek? Próbowałem tego .

Ale to nie działało przynajmniej po wyjęciu z pudełka. Byłoby miło użyć czegoś, co jest wbudowane.

Nie chciałbym powtarzać

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

wszędzie, jeśli niektóre if (isempty(a)) będą dostępne.

Jaskółka oknówka
źródło

Odpowiedzi:

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

Aby zignorować białe znaki dla ciągów:

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

Jeśli potrzebujesz starszej obsługi (IE8-) trim(), użyj $.trimlub wypełnienia .

David Hellsing
źródło
10
@CoffeeAddict pusty łańcuch znaków jest w javascript falsy, więc tak, wyrażenie ma wartość true, jeśli a„” lub dowolną inną wartość falsy (null, false, undefined, 0, NaN).
David Hellsing,
21
Jeśli chcesz również dopasować ciągi znaków z tylko białymi if (!$.trim(a))
spacjami,
3
Z mojego doświadczenia wynika, że ​​zdecydowaną większość razy chcesz uruchomić ten test, chcesz również, aby obejmował on testowanie spacji. Ponieważ jest to zwykły przypadek, OP powinien uwzględnić w swojej odpowiedzi komentarz @IlariKajaste
Bane
17
Przyjęta odpowiedź nie powiedzie się, gdy wpiszesz 0, ale zadziała dla 1, 2, 3, 4 itd.
Steven
5
Czy to nie if (!a.trim())jest trochę niebezpieczne? Co jeśli ajest niezdefiniowany lub zerowy?
Timo,
27

Podany link wydaje się próbować czegoś innego niż test, którego próbujesz uniknąć.

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

sprawdza, czy ciąg jest pustym ciągiem lub jest pusty. Artykuł, który łączysz z testami, jeśli ciąg składa się wyłącznie z białych znaków (lub jest pusty).

Opisany test można zastąpić:

if (!a)

Ponieważ w javascript, zarówno pusty ciąg, jak i null, mają wartość false w kontekście logicznym.

SpoonMeiser
źródło
if(!a)czy to nie zawiedzie dla ciągu złożonego ze powiedzmy 4 spacji? ``
KNU
@KNU Tak, ale pytanie dotyczy pustego łańcucha, a łańcuch składający się ze spacji nie jest łańcuchem pustym. Zobacz, co napisałem o różnicy między pytaniem a tym, co robi połączony kod
SpoonMeiser,
Ta odpowiedź jest zła. Traktuje „0” jak pusty ciąg znaków, którym nie jest.
John Henckel,
@JohnHenckel: Będzie traktowany 0jak pusty ciąg, ale nie "0". Zakładam, że o to ci chodziło? Można sobie wyobrazić, że jest to używane w sytuacji, gdy wiesz, że ajest to albo łańcuch, albo zero, ale tak. Coś, o czym należy pamiętać.
SpoonMeiser
25

Na podstawie odpowiedzi Davida osobiście lubię najpierw sprawdzać dany obiekt, czy w ogóle jest to ciąg znaków. W przeciwnym razie wywołanie .trim()nieistniejącego obiektu spowodowałoby wyjątek:

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

Stosowanie:

isEmpty(undefined); // true
isEmpty(null); // true
isEmpty(''); // true
isEmpty('foo'); // false
isEmpty(1); // false
isEmpty(0); // false
Timo
źródło
sprawdzam za pomocą <br /> <p> </p> z textarea i powiedziałem, że nie jest pusty jak powinien
kreamik
5

Sprawdź, czy dane są pustym ciągiem (i zignoruj ​​białe znaki) za pomocą jQuery:

function isBlank( data ) {
    return ( $.trim(data).length == 0 );
}
Sjoerd Linders
źródło
5

Aby sprawdzić wszystkie „ puste ”, takie jak 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;
    }
}

Zastosuj przypadki i wyniki.

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
Imran Ahmad
źródło
3
if(!my_string){ 
// stuff 
}

i

if(my_string !== "")

jeśli chcesz zaakceptować null, ale odrzucić pusty

EDYCJA: woops, zapomniałem, że twój stan jest, jeśli jest pusty

Greg
źródło
2

Spróbuj wykonać to w konsoli przeglądarki lub w replice node.js.

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

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

Dlatego do testu wystarczy prosta konstrukcja rozgałęziająca.

if(string) {
    // string is not empty
}
Harry Love
źródło
1
lepiej powiedzieć „!! string” zamiast „string? true: false” lub nawet po prostu „string”.
ア レ ッ ク ス
2

Ponieważ możesz także wprowadzać liczby, a także ciągi znaków o ustalonym typie, odpowiedź powinna w rzeczywistości brzmieć:

function isBlank(value) {
  return $.trim(value);
}
Steven
źródło
Czy nie powinno tak być? return !!$.trim(value);
wonsuc
-1

Spróbuj tego

if(!a || a.length === 0)
Atif Aziz
źródło
PO wyraźnie stwierdził, że szukają alternatywy dla tego.
Wayne
-4
if((a.trim()=="")||(a=="")||(a==null))
{
    //empty condition
}
else
{
    //working condition
}
Amarjeet Chaani
źródło
Jeśli a jest, nullto się a.trim()nie powiedzie. To złe zamówienie, żeby to sprawdzić. A jeśli zmienisz kolejność, twoja odpowiedź nie zawiera niczego, co wcześniej nie było sugerowane.
Mike Scotty