Comment vérifier si une variable est une chaîne nulle ou vide ou tout un espace en JavaScript?


97

J'ai besoin de vérifier si une variable est nulle ou a tous les espaces vides ou est juste vide ("").

J'ai ce qui suit, mais cela ne fonctionne pas:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}

Si je fais ce qui suit, cela fonctionne:

if (addr) {

}​

Ce dont j'ai besoin, c'est quelque chose comme la méthode C # String.IsNullOrWhiteSpace(value).


3
Voulez-vous vraiment dire has *any* empty spaces? Ou voulez-vous dire is all empty spaces?
Madbreaks

1
qu'en est-il indéfini?
CodeToad

Réponses:


135

Une solution non-jQuery qui imite plus étroitement IsNullOrWhiteSpace, mais pour détecter uniquement les espaces nuls, vides ou tous les espaces:

function isEmptyOrSpaces(str){
    return str === null || str.match(/^ *$/) !== null;
}

...puis:

var addr = '  ';

if(isEmptyOrSpaces(addr)){
    // error 
}

* EDIT * Veuillez noter que l'opération indique spécifiquement:

J'ai besoin de vérifier si un var est nul ou a des espaces vides ou d'ailleurs juste vide .

Donc, bien que oui, "espace blanc" englobe plus que nul, espaces ou blanc ma réponse est destinée à répondre à la question spécifique de op. Ceci est important car op peut ne PAS vouloir attraper des choses comme les onglets, par exemple.


63
Les espaces peuvent également inclure des tabulations, d'autres types d'espaces, etc. Utilisez-les /^\s*$/pour les attraper également.
accorder

2
@Grant Je n'ai pas fait cela à dessein parce que op a dit "Je dois vérifier si une variable est nulle ou a des espaces vides ou pour cette question juste vide" .
Madbreaks

5
Qu'en est-il de l'utilisation de test () au lieu de match ()? retourne str === null || (/ ^ * $ /). test (str);
Mario Levrero

1
@MarioLevrero j'aime ça! testest également plus rapide que je me souvienne.
Madbreaks

10
@Madbreaks l'op a déclaré "Ce dont j'ai besoin est quelque chose comme cette méthode C #: String.IsNullOrWhiteSpace". Cette méthode traite les tabulations comme des espaces.
subsci le

24
if (addr == null || addr.trim() === ''){
  //...
}

Une nullcomparaison attrapera également undefined. Si vous voulez falseréussir aussi, utilisez !addr. Pour la compatibilité descendante du navigateur, remplacez addr.trim()par $.trim(addr).


1
"Si vous voulez que false passe aussi, utilisez! Addr" - décompose si addrest zéro.
Madbreaks

pourquoi le premier ==et le second correspondent-ils ===?
maximum

19

Vous pouvez utiliser if(addr && (addr = $.trim(addr)))

Cela a l'avantage de supprimer en fait tout espace blanc externe au addrlieu de simplement l'ignorer lors de la vérification.

Référence: http://api.jquery.com/jQuery.trim/


2
En supposant, bien sûr, l'op veut supprimer l'espace blanc. :)
Madbreaks

1
Votre réponse renverra un faux positif si elle addrest initialisée par exemple avec un entier.
Madbreaks

Sans plus d'informations, je suppose que le var est toujours une chaîne s'il n'est pas nul / non défini.
ThiefMaster

1
Op dit "vérifier si une variable ...", et son exemple montre que cette variable est une chaîne, mais je suppose que ce n'est qu'un exemple pour démontrer l'idée.
Madbreaks

5
isEmptyOrSpaces(str){
    return !str || str.trim() === '';
}

2
Est-il nécessaire de dupliquer les réponses existantes? Ou avez-vous changé quelque chose aux réponses précédentes qui fait une différence pertinente?
Nico Haase

4

Vous pouvez créer votre propre méthode Equivalent à

String.IsNullOrWhiteSpace(value)

function IsNullOrWhiteSpace( value) {

    if (value== null) return true;

    return value.replace(/\s/g, '').length == 0;
}

1
\scorrespond à plus que des espaces
Madbreaks

4

Ancienne question, mais je pense qu'elle mérite une réponse plus simple.

Vous pouvez simplement faire:

var addr = "  ";

if (addr && addr.trim()) {

    console.log("I'm not null, nor undefined, nor empty string, nor string composed of whitespace only.");

}

1
Ne devrait-il pas l'être addr && addr.trim()? Avec un single, &ça n'a pas marché pour moi mais ça marche avec &&.
markv12

3

Lors de la vérification des espaces blancs, la méthode c # utilise la norme Unicode. L'espace blanc comprend des espaces, des tabulations, des retours chariot et de nombreux autres codes de caractères non imprimables. Il vaut donc mieux utiliser:

function isNullOrWhiteSpace(str){
    return str == null || str.replace(/\s/g, '').length < 1;
}

Op indique explicitement que le but est de vérifier les espaces , pas les espaces.
Madbreaks

5
Op dit "Ce dont j'ai besoin est quelque chose comme cette méthode C #: String.IsNullOrWhiteSpace (valeur)". Et si vous ne faites que vérifier les espaces, ne nommez pas votre fonction isNullOrWhiteSpace mais nommez-la plutôt IsNullOrEmtpy.
Joao Leme du

La méthode C # fonctionnerait pour vérifier si une chaîne était null ou une série d'espaces. Op voulait quelque chose "comme" ça, mais pour vérifier spécifiquement les espaces.
Madbreaks du


0

Essayez ceci

/**
  * Checks the string if undefined, null, not typeof string, empty or space(s)
  * @param {any} str string to be evaluated
  * @returns {boolean} the evaluated result
*/
function isStringNullOrWhiteSpace(str) {
    return str === undefined || str === null
                             || typeof str !== 'string'
                             || str.match(/^ *$/) !== null;
}

Vous pouvez l'utiliser comme ça

isStringNullOrWhiteSpace('Your String');


0
function isEmptyOrSpaces(str){
    return str === null || str.match(/^[\s\n\r]*$/) !== null;
}

0

Vous pouvez essayer ceci:

do {
   var op = prompt("please input operatot \n you most select one of * - / *  ")
} while (typeof op == "object" || op == ""); 
// execute block of code when click on cancle or ok whthout input
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.