Quelle est la meilleure façon de tester une chaîne vide avec jquery-out-of-the-box?

229

Quelle est la meilleure façon de tester une chaîne vide avec jquery-out-of-the-box, c'est-à-dire sans plugins? J'ai essayé ça .

Mais cela n'a pas fonctionné au moins hors de la boîte. Ce serait bien d'utiliser quelque chose qui est intégré.

Je ne voudrais pas répéter

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

partout si certains if (isempty(a)) seraient disponibles.

Martin
la source

Réponses:

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

Pour ignorer l'espace blanc pour les chaînes:

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

Si vous avez besoin d'un support hérité (IE8-) pour trim(), utilisez $.trimou un polyfill .

David Hellsing
la source
10
La chaîne vide @CoffeeAddict est fausse en javascript, donc oui, l'expression est évaluée à vrai si aest "" ou toute autre valeur falsifiée (null, false, indéfini, 0, NaN).
David Hellsing
21
Si vous devez également faire correspondre des chaînes avec uniquement des espaces, c'est une bonne idée d'utiliserif (!$.trim(a))
Ilari Kajaste
3
D'après mon expérience, la grande majorité des fois où vous souhaitez exécuter ce test, vous souhaitez également qu'il inclue des tests pour les espaces blancs. Puisque c'est le cas habituel, OP devrait inclure dans sa réponse le commentaire de @IlariKajaste
Bane
17
La réponse acceptée échouera lorsque vous entrerez un 0, mais cela fonctionnera pour 1, 2, 3, 4 etc.
Steven
5
N'est-ce pas if (!a.trim())un peu dangereux? Et si aest indéfini ou nul?
Timo
27

Le lien que vous avez donné semble essayer quelque chose de différent du test que vous essayez d'éviter de répéter.

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

teste si la chaîne est une chaîne vide ou nulle. L'article que vous avez lié aux tests si la chaîne est entièrement composée d'espaces (ou est vide).

Le test que vous avez décrit peut être remplacé par:

if (!a)

Parce qu'en javascript, une chaîne vide et null, les deux sont évalués à false dans un contexte booléen.

SpoonMeiser
la source
if(!a)ne va-t-il pas échouer pour une chaîne composée de disons 4 espaces? ``
KNU
@KNU Oui, mais la question porte sur une chaîne vide et une chaîne composée d'espaces n'est pas une chaîne vide. Voir ce que j'ai écrit sur la différence entre ce qui a été demandé et ce que fait le code lié
SpoonMeiser
Cette réponse est fausse. Il traite '0' comme une chaîne vide, ce qui n'est pas le cas.
John Henckel
@JohnHenckel: Il traitera 0comme une chaîne vide, mais pas "0". Je suppose que c'est ce que tu voulais dire? Il est concevable que cela soit utilisé dans une situation où vous savez que ac'est soit une chaîne, soit null, mais oui. Quelque chose à savoir.
SpoonMeiser
25

Sur la base de la réponse de David, j'aime personnellement vérifier d'abord l'objet donné s'il s'agit d'une chaîne. Sinon, appeler .trim()un objet non existant lèverait une exception:

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

Usage:

isEmpty(undefined); // true
isEmpty(null); // true
isEmpty(''); // true
isEmpty('foo'); // false
isEmpty(1); // false
isEmpty(0); // false
Timo
la source
je vérifie avec <br /> <p> </p> de textarea et il a dit pas vide comme il se doit
kreamik
5

Vérifiez si les données sont une chaîne vide (et ignorez tout espace blanc) avec jQuery:

function isBlank( data ) {
    return ( $.trim(data).length == 0 );
}
Sjoerd Linders
la source
5

Pour vérifier tous les 'vides' comme 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;
    }
}

Cas d'utilisation et résultats.

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
la source
3
if(!my_string){ 
// stuff 
}

et

if(my_string !== "")

si vous voulez accepter null mais rejeter vide

EDIT: woops, j'ai oublié que votre condition est si elle est vide

Greg
la source
2

Essayez de l'exécuter dans votre console de navigateur ou dans une repl node.js.

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

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

Par conséquent, une simple construction de branchement suffira pour le test.

if(string) {
    // string is not empty
}
Harry Love
la source
1
il vaut mieux dire "!! string" au lieu de "string? true: false" ou même juste "string".
ア レ ッ ク ス
2

Étant donné que vous pouvez également saisir des nombres ainsi que des chaînes de type fixe, la réponse devrait en fait être:

function isBlank(value) {
  return $.trim(value);
}
Steven
la source
Ça ne devrait pas être comme ça? return !!$.trim(value);
wonsuc
-1

Essaye ça

if(!a || a.length === 0)
Atif Aziz
la source
Le PO a spécifiquement déclaré qu'il cherchait une alternative à cela.
Wayne
-4
if((a.trim()=="")||(a=="")||(a==null))
{
    //empty condition
}
else
{
    //working condition
}
Amarjeet Chaani
la source
Si un est nullalors a.trim()échouerait. C'est un mauvais ordre pour vérifier les choses. Et si vous modifiez la commande, votre réponse ne fournit rien, cela n'a pas été suggéré auparavant.
Mike Scotty