web-dev-qa-db-fra.com

String strip () pour JavaScript?

Qu'est-ce qu'une implémentation JavaScript propre et efficace pour supprimer des espaces de début et de fin d'une chaîne?

Par exemple:

" dog"

"dog "

" dog "

" dog "

tous sont transformés en

"dog"

170
rawrrrrrrrr

Utilisez ceci:

if(typeof(String.prototype.trim) === "undefined")
{
    String.prototype.trim = function() 
    {
        return String(this).replace(/^\s+|\s+$/g, '');
    };
}

La fonction trim sera désormais disponible en tant que fonction de première classe sur vos chaînes. Par exemple:

" dog".trim() === "dog" //true

EDIT: Prenait la suggestion de J-P de combiner les motifs de regex en un seul. Également ajouté le modificateur global selon la suggestion de Christoph.

Pris l'idée de Matthew Crumley de renifler la fonction de rognage avant de la recréer. Ceci est fait dans le cas où la version de JavaScript utilisée sur le client est plus récente et possède donc sa propre fonction de trim native.

195
David Andres

Pour les utilisateurs de jQuery, que diriez-vous de $.trim(s)

147
user638373

Gumbo l'a déjà noté dans un commentaire, mais cela mérite d'être répété: la méthode trim() a été ajoutée dans JavaScript 1.8.1 et est supportée par tous les navigateurs modernes (Firefox 3.5+, IE 9 , Chrome 10, Safari 5.x), bien que IE 8 et les versions antérieures ne le prennent pas en charge. L'utilisation est simple:

 "  foo\n\t  ".trim() => "foo"

Voir également:

94
jpatokal

Voici la fonction que j'utilise.

function trim(s){ 
  return ( s || '' ).replace( /^\s+|\s+$/g, '' ); 
}
12
Mic

Un meilleur polyfill de MDN qui prend en charge la suppression de BOM et NBSP :

if (!String.prototype.trim) {
  String.prototype.trim = function () {
    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
  };
}

N'oubliez pas que la modification des prototypes intégrés entraîne des pertes de performances (en raison du moteur JS qui tire parti de plusieurs optimisations d'exécution), et dans les situations critiques en termes de performances, vous devrez peut-être envisager la possibilité de définir myTrimFunction(string). Cela dit, si vous ciblez un environnement ancien sans support natif .trim(), vous aurez probablement des problèmes de performances plus importants à traiter.

12
Bardi Harborow

Steven Levithan a écrit une fois sur la façon de mettre en œuvre un ajustement plus rapide de JavaScript . Cela vaut vraiment le coup d'oeil.

8
Gumbo

Si vous utilisez déjà jQuery, alors vous voudrez peut-être jeter un oeil à jQuery.trim() qui est déjà fourni avec jQuery.

7
Filip Dupanović

Si, plutôt que d'écrire du nouveau code pour couper une chaîne, vous regardez le code existant qui appelle "strip ()" et vous vous demandez pourquoi il ne fonctionne pas, vous pouvez vérifier s'il tente d'inclure quelque chose comme le framework prototypejs et assurez-vous que le chargement est en cours.
Ce framework ajoute une fonction strip à tous les objets String, mais si par ex. vous l'avez mis à niveau et vos pages Web font toujours référence à l'ancien fichier .js, cela ne fonctionnera bien sûr pas.

6
Eric