Comment puis-je vérifier si la chaîne contient des caractères et des espaces, pas seulement des espaces?

134

Quelle est la meilleure façon de vérifier si une chaîne ne contient que des espaces?

La chaîne est autorisée à contenir des caractères combinés avec des espaces, mais pas uniquement des espaces.

patade
la source

Réponses:

294

Au lieu de vérifier toute la chaîne pour voir s'il n'y a que des espaces, vérifiez simplement s'il y a au moins un caractère sans espace:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}
nickf
la source
7
Faites juste attention à ce que myString soit une valeur nulle. Il retournera true: /\S/.test(null) == true
Dilshod Tadjibaev
6
beaucoup de ces réponses contiennent des regex! Cela signifie-t-il qu'il n'y a pas de moyen natif de détecter des choses dans js? n'y a-t-il pas de chaîne. IsWhitespace ou quelque chose? N'y a-t-il pas non plus de garniture native?
JonnyRaa
4
@JonnyLeeds Puisque regex prend même en charge la syntaxe dans js, on pourrait dire que c'est en fait plus natif que toutes les méthodes utilitaires fournies;)
Ricardo van den Broek
38

Réponse la plus simple si votre navigateur prend en charge la trim()fonction

if (myString && !myString.trim()) {
    //First condition to check if string is not empty
    //Second condition checks if string contains just whitespace
}
Un paquet entier
la source
De nos jours, lorsque IE 8 est RIP, il s'agit de la solution la plus propre et la plus efficace en termes de performances reposant sur l'implémentation native. Et cela fonctionne correctement avec les onglets et les nouvelles lignes.
Alexander Abakumov
35
if (/^\s+$/.test(myString))
{
      //string contains only whitespace
}

ceci vérifie 1 ou plusieurs caractères d'espacement, si vous le remplacez également par une chaîne vide, remplacez-le +par *.

Paul Creasey
la source
18

Eh bien, si vous utilisez jQuery, c'est plus simple.

if ($.trim(val).length === 0){
   // string is invalid
} 
Dayson
la source
1
Fonctionne aussi pour les sauts de ligne et les tabulations, alors que les exemples de regex ci-dessus ne le font pas car ils ne recherchent que l'absence de tout sauf d'espace blanc. Bien que, je suis sûr que quelqu'un avec des connaissances en regex pourrait créer une expression régulière qui inclurait également tab / newline dans la recherche.
Kate
ne fonctionne pas lorsque val reçoit des espaces, dans mon cas quatre espaces.
user1451111
7

Vérifiez simplement la chaîne par rapport à cette expression régulière:

if(mystring.match(/^\s+$/) === null) {
    alert("String is good");
} else {
    alert("String contains only whitespace");
}
Ian Clelland
la source
1
La façon dont je lis la question est que / any / whitespace est autorisé, tant que la chaîne n'est pas / only / whitespace. Il est silencieux sur ce qu'il faut faire si la chaîne est vide, il se peut donc que la réponse de nickf soit encore meilleure.
Ian Clelland
1
if (!myString.replace(/^\s+|\s+$/g,""))
  alert('string is only whitespace');
svelte
la source
0

L'expression régulière que j'ai fini par utiliser lorsque je souhaite autoriser des espaces au milieu de ma chaîne, mais pas au début ou à la fin, était la suivante:

[\S]+(\s[\S]+)*

ou

^[\S]+(\s[\S]+)*$

Donc, je sais que c'est une vieille question, mais vous pouvez faire quelque chose comme:

if (/^\s+$/.test(myString)) {
    //string contains characters and white spaces
}

ou vous pouvez faire ce que nickf a dit et utiliser:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}
Will Strohmeier
la source
0

J'ai utilisé la méthode suivante pour détecter si une chaîne ne contient que des espaces. Il correspond également aux chaînes vides.

if (/^\s*$/.test(myStr)) {
  // the string contains only whitespace
}
Rajat Saxena
la source
0

Cela peut être une solution rapide

return input < "\u0020" + 1;
9me
la source
C'est juste faire return input < " 1"; ce qui est juste faire une comparaison alphabétique. Tant que l'entrée est triée inférieure à "1", elle retournera true. Exemple: return " asdfv34562345" < "\u0020" + 1;évalue à vrai.
Derek Ziemba