166 votes

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

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

La chaîne peut contenir des caractères combiné avec des espaces, mais pas juste les espaces blancs.

336voto

nickf Points 185423

Au lieu de vérifier toute la chaîne de caractères pour voir s'il n'y a que des espaces blancs, il suffit de vérifier s'il y a au moins un caractère du type non les espaces blancs :

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

10 votes

Faites juste attention à ce que myString soit une valeur nulle. Il retournera vrai : / \S /.test(null) == true

7 votes

Beaucoup de ces réponses contiennent des regex ! Est-ce que cela signifie qu'il n'y a pas de moyen natif de détecter des choses en js ? Il n'y a pas de string.IsWhitespace ou autre ? Il n'y a pas non plus de trim natif ?

8 votes

@JonnyLeeds Puisque regex a même un support syntaxique en js, on pourrait dire qu'il est en fait plus natif que n'importe quelle méthode utilitaire embarquée ;)

38voto

Paul Creasey Points 15663
if (/^\s+$/.test(myString))
{
      //string contains only whitespace
}

ceci vérifie la présence d'un ou plusieurs caractères d'espacement, si vous souhaitez également faire correspondre une chaîne vide, remplacez-la par + con * .

23voto

Dayson Points 553

Si vous utilisez jQuery, c'est plus simple.

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

2 votes

Cela fonctionne également pour les nouvelles lignes et les tabulations, alors que les exemples de regex ci-dessus ne le font pas, car ils ne recherchent que l'absence d'espace blanc. Cependant, je suis sûr que quelqu'un ayant des connaissances en matière de regex pourrait créer une regex qui inclurait également la tabulation / le saut de ligne dans la recherche.

0 votes

Ne fonctionne pas lorsque la valeur est affectée d'espaces, dans mon cas quatre espaces.

8voto

Ian Clelland Points 15066

Il suffit de vérifier la chaîne de caractères contre cette regex :

if(mystring.match(/^\s+$/) === null) {
    alert("String is good");
} else {
    alert("String contains only whitespace");
}

1 votes

D'après la façon dont je lis la question, il est dit que /tous/ les espaces blancs sont autorisés, tant que la chaîne n'est pas /seulement/ un espace blanc. Il est silencieux sur ce qu'il faut faire si la chaîne est vide, donc il se peut que la réponse de nickf soit encore meilleure.

6voto

Mef Points 15230

Vous pourriez couper la ficelle et vérifier le résultat. Malheureusement, il n'existe pas de solution native en javaScript pour cela. Vous pourriez écrire une fonction du type

return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');

(Voir http://blog.stevenlevithan.com/archives/faster-trim-javascript pour de nombreux exemples)

Maintenant, vous pouvez faire

if (trim(myString).length === 0) {
  // String contains only whitespace
}

Il faudrait d'abord créer une copie de la chaîne originale si elle ne doit pas être modifiée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X