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"
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.
Pour les utilisateurs de jQuery, que diriez-vous de $.trim(s)
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:
Voici la fonction que j'utilise.
function trim(s){
return ( s || '' ).replace( /^\s+|\s+$/g, '' );
}
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.
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.
Si vous utilisez déjà jQuery, alors vous voudrez peut-être jeter un oeil à jQuery.trim()
qui est déjà fourni avec jQuery.
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.