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.

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
}

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
}

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


18

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

if ($.trim(val).length === 0){
   // string is invalid
} 

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");
}

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');

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
}

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
}

0

Cela peut être une solution rapide

return input < "\u0020" + 1;

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