2009-09-13 17 views
143

Cos'è un'implementazione JavaScript pulita ed efficiente per eliminare gli spazi iniziali e finali da una stringa?Stringa di strisce() per JavaScript?

Ad esempio:

" dog"

"dog "

" dog "

" dog "

tutti arrivare trasformato in

"dog"

+22

Questa funzione è piuttosto conosciuta come 'trim'. Vedi https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim – Gumbo

+1

@Gumbo: trim è un po 'più recente e potrebbe non essere supportato tra i browser. Non lo so, ma non puoi mai dirlo con il supporto cross browser. –

risposta

168

Utilizzare questa:

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

La funzione trim sarà ora disponibile come funzione di prima classe sulle tue corde. Ad esempio:

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

EDIT: preso suggerimento di J-P per combinare i modelli regex in uno. Inoltre ha aggiunto il modificatore globale per suggerimento di Christoph.

Ha preso l'idea di Matthew Crumley di annusare la funzione di assetto prima di ricrearla. Ciò avviene nel caso in cui la versione di JavaScript utilizzata sul client sia più recente e quindi abbia una propria funzione di trim nativa.

+3

vedi http://blog.stevenlevithan.com/archives/faster-trim-javascript per alcuni dati di performance – Christoph

+2

per essere compatibile con le specifiche ECMA, 'trim()' deve eseguire il cast di questo per scrivere una stringa, cioè tu ' Dovremo cambiare 'this.replace (...)' con 'String (this) .replace (...)' or' ('' + this) .replace (...) '; questo permette di 'call()' o 'apply()' la funzione ai valori non stringa – Christoph

+0

@Christoph: intendi dire all'interno della definizione della stringa String.prototype.trim() = ...? Mi sarei aspettato che "questo" si riferisse già a una stringa, poiché questa è una funzione prototipale che estende il tipo String. –

10

Ecco la funzione che utilizzo.

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

Se, invece di scrivere un nuovo codice per tagliare una stringa, stai guardando il codice esistente che chiama "strip()" e chiedendo perché non funziona, potresti voler controllare se tenta di includere qualcosa come il framework prototypejs e assicurati che venga effettivamente caricato.
Questo framework aggiunge una funzione di strip a tutti gli oggetti String, ma se ad es. l'hai aggiornato e le tue pagine web si riferiscono ancora al vecchio file .js, ovviamente non funzionerà.

+3

esattamente perché sono venuto qui! – momeara

128

Per gli utenti di jQuery, come su $.trim(s)

64

Gumbo già notato questo in un commento, ma questo porta a ripetere come una risposta: il metodo trim() è stato aggiunto in JavaScript 1.8.1 ed è supportato da tutti i browser moderni (Firefox 3.5+, IE 9, Chrome 10, Safari 5.x), sebbene IE 8 e precedenti non lo supportino.L'uso è semplice:

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

Vedi anche:

7

Se stai già utilizzando jQuery, quindi si consiglia di avere uno sguardo a jQuery.trim() che è già fornito con jQuery.

11

Una migliore polyfill dal MDN che supporta la rimozione di BOM e NBSP:

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

Tenete a mente che la modifica prototipi incorporati viene fornito con un calo di prestazioni (a causa della bailing motore di JS su una serie di ottimizzazioni di runtime) e in situazioni di prestazioni critiche potrebbe essere necessario prendere in considerazione l'alternativa di definire myTrimFunction(string) invece. Detto questo, se si sta prendendo di mira un ambiente precedente senza il supporto nativo .trim(), è probabile che si abbiano problemi di prestazioni più importanti da affrontare.

Problemi correlati