web-dev-qa-db-fra.com

Détecter si la chaîne contient des espaces

Comment détecter si une chaîne a des caractères d'espacement? 

Le ci-dessous ne détecte que les espaces réels. J'ai besoin de vérifier n'importe quel espace.

if(str.indexOf(' ') >= 0){
    console.log("contains spaces");
}
16
Malcr001

Ce que vous avez trouvera un espace n'importe où dans la chaîne, pas seulement entre les mots.

Si vous voulez trouver n'importe quel espace, vous pouvez utiliser ceci, qui utilise une expression régulière:

if (/\s/.test(str)) {
    // It has any kind of whitespace
}

\s signifie "n'importe quel caractère d'espacement" (espaces, tabulations, tabulations verticales, sauts de ligne, sauts de ligne, etc.) et trouvera ce caractère n'importe où dans la chaîne.

Selon MDN , \s est équivalent à: [ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​\u2001\u2002​\u2003\u2004​\u2005\u2006​\u2007\u2008​\u2009\u200a​\u2028\u2029​​\u202f\u205f​\u3000].


Pour une raison quelconque, j'ai initialement lu votre question comme suit: "Comment savoir si une chaîne de caractères contient des espaces uniquement?" et donc j'ai répondu avec le ci-dessous. Mais comme le souligne @CrazyTrain, ce n'est pas ce que dit la question. Je vais le laisser, cependant, juste au cas où ...

Si vous voulez dire littéralement des espaces, un regex peut le faire:

if (/^ *$/.test(str)) {
    // It has only spaces, or is empty
}

Cela dit: Faites correspondre le début de la chaîne (^) suivi de zéro ou de plusieurs espaces, suivi de la fin de la chaîne ($). Changez le * en + si vous ne voulez pas faire correspondre une chaîne vide.

Si vous entendez les espaces comme un concept général:

if (/^\s*$/.test(str)) {
    // It has only whitespace
}

Cela utilise \s (espace) plutôt que l’espace, mais est par ailleurs identique. (Et encore une fois, remplacez * par + si vous ne voulez pas faire correspondre une chaîne vide.)

53
T.J. Crowder
var string  = 'hello world';
var arr = string.split(''); // converted the string to an array and then checked: 
if(arr[i] === ' '){
   console.log(i);
}

Je sais que regex peut faire l'affaire aussi!

0
sg28