Quel est le meilleur moyen de couper () en javascript


Answers

La forme la plus courte pour jQuery:

string = $.trim(string);

Lien

Question

La question dit tout; JS ne semble pas avoir une méthode native trim ().




Pourquoi ne pas simplement modifier le prototype String? Pourquoi ne pas voler la fonction trim d'une bibliothèque open source, comme je l'ai fait ici avec YUI? (Avez-vous vraiment besoin de charger et d'un cadre complet pour cette tâche simple?) Mettez-les ensemble et vous obtenez ceci:

String.prototype.trim = function() {
    try {
        return this.replace(/^\s+|\s+$/g, "");
    } catch(e) {
        return this;
    }
}

var s = " hello ";
alert(s.trim() == "hello"); // displays true



Microsoft .NET a également la fonction String.trim dans le cadre des extensions de type de base JavaScript. Il pourrait être utilisé si vous codez l'application ASP.NET.




Je l'utilise avec du JavaScript natif

// Adding trim function to String object if its not there
if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, '');
  }
}

Utilisez comme ça

var myString = "                  some text                  ";

alert(myString.trim());



J'utilise ceci:

Travailler avec des fonctions.

 function trim($) { 
                return (typeof $ == "function" ? $() : $).replace(/[\s]*/g,"")
        }

        code example: 

        trim((function(){ return "a  b"})) // ab

        trim(" a  b") //ab



C'est une vieille question mais aucune d'entre elles n'a fonctionné pour moi. J'avais juste besoin de découper les espaces blancs avant et arrière et c'est ce que j'ai fait. Ma balise div avait un id = start-date.

$("#start-date").text().trim()



Une version légèrement plus fine de @ Pat's.

return str.replace( /^\s+|\s+$/g, '' );



Eh bien, comme beaucoup de gens le disent toujours, la fonction trim fonctionne plutôt bien, mais si vous ne voulez pas utiliser un framework entier pour effectuer un trim, il peut être utile de jeter un oeil à son implémentation. Alors voilà:

function( text ) { return (text || "").replace( /^(\s|\u00A0)+|(\s|\u00A0)+$/g, "" );}

Les principaux avantages que je vois dans cette implémentation, par rapport à d'autres solutions déjà proposées ici sont:

  • Le drapeau 'g' qui vous permet d'effectuer une coupe sur une chaîne multiligne
  • La syntaxe (text || ") qui garantit que la fonction fonctionnera toujours, même si l'argument passé est null ou indéfini.



J'ai fait une vitesse de trim-fonction à l'esprit. Cette fonction bat dans une nette différence tous les 24 concurrents (dont beaucoup utilisent des expressions régulières) et aussi natif string.trim () de Chrome et Chromium (!) Et effectue aussi rapide que trim () de Safari. Les résultats des tests sont ici: http://jsperf.com/mega-trim-test/7

function trim27(str) {
  var c;
  for (var i = 0; i < str.length; i++) {
    c = str.charCodeAt(i);
    if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12)
    continue; else break;
  }
  for (var j = str.length - 1; j >= i; j--) {
    c = str.charCodeAt(j);
    if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12)
    continue; else break;
  }
  return str.substring(i, j + 1);
}

La fonction supprime les caractères "\ n \ r \ t \ f", mais il est facile d'ajouter plus de caractères espaces, par exemple. ceux que regexp utilise comme espaces (\ s) avec seulement une performance mineure perdue (voir http://jsperf.com/mega-trim-test/8 ).

Edit: Le précédent trim27 () ne coupe que les caractères les plus communs ("\ n \ r \ t \ f"), mais pour couper tous les espaces blancs possibles, j'ai inclus ci-dessous une nouvelle fonction mytrim ():

if (!String.prototype.trim || "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF".trim() || navigator.userAgent.toString().toLowerCase().indexOf("chrome") != -1)
    var mytrim = function(str) {
        var c;
        for (var i = 0; i < str.length; i++) {
            c = str.charCodeAt(i);
            if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288 || c == 65279)
            continue; else break;
        }
        for (var j = str.length - 1; j >= i; j--) {
            c = str.charCodeAt(j);
            if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288 || c == 65279)
            continue; else break;
        }
        return str.substring(i, j + 1);
    };
    else var mytrim = function(str) {
        return str.trim();
    }

Utilisez-le de cette façon:

var foo = mytrim(" \n \t Trimmed \f \n "); // foo is now "Trimmed"

Le ci-dessus mytrim () fait ce qui suit:

  • Ajuste 26 espaces blancs différents (tous les 25 espaces mentionnés dans http://perfectionkills.com/whitespace-deviations/ et en plus uFEFF, qui est ZERO WIDTH NO-BREAK SPACE.
  • Rend les résultats de rognage homogènes d'un navigateur à l'autre.
  • Utilise native trim () si elle est disponible ET a la capacité de couper les 27 espaces blancs différents. La seule exception est Chrome et Chrome, qui ont tous deux un réglage natif si lent () qu'au lieu de natif, nous utilisons notre ajustement personnalisé.
  • ET LE PLUS IMPORTANT: n'est pas beau et n'est pas court, mais est clairement plus rapide que l'une des 24 alternatives concurrentielles dans http://jsperf.com/mega-trim-test/12 (exception: plutôt vieux Firefox 3.6.25 dans Windows 7 exécute mytrim () plutôt lentement pour une raison inconnue).