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).

Nate Pet
la source
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.

Madbreaks
la source
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).

Ricardo Tomasi
la source
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/

ThiefMaster
la source
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() === '';
}
Ali
la source
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;
}
Shehzad
la source
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.");

}
sandre89
la source
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;
}
Joao Leme
la source
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
3

Version simplifiée de ce qui précède: (à partir d'ici: https://stackoverflow.com/a/32800728/47226 )

function isNullOrWhitespace( input ) {
  return !input || !input.trim();
}
Aaron Hoffman
la source
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');
Rod lauro Romarate
la source
0
isEmptyOrSpaces(str){
    return str === null || str.trim().length>0;
}
Thalinda Bandara
la source
0
function isEmptyOrSpaces(str){
    return str === null || str.match(/^[\s\n\r]*$/) !== null;
}
pico
la source
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
hamedalavi
la source