2009-09-13 10 views
143

¿Qué es una implementación de JavaScript limpia y eficiente para quitar los espacios iniciales y finales de una cadena?String strip() para JavaScript?

Por ejemplo:

" dog"

"dog "

" dog "

" dog "

todo llegar a convertirse en

"dog"

+22

Esta función se rathern conocido como 'trim'. Ver https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim – Gumbo

+1

@Gumbo: ajuste es un poco más nuevo, y puede no ser compatible en todos los navegadores. No lo sé, pero nunca se puede decir con el soporte de navegador cruzado. –

Respuesta

168

Utilice esta:

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

La función de cortar ahora estará disponible como una función de primera clase en sus cadenas. Por ejemplo:

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

EDITAR: Tomó la sugerencia de J-P para combinar los patrones de expresiones regulares en una sola. También se agregó el modificador global según la sugerencia de Christoph.

Tomó la idea de Matthew Crumley de olfatear la función de recorte antes de volver a crearla. Esto se hace en caso de que la versión de JavaScript utilizada en el cliente sea más reciente y, por lo tanto, tenga su propia función de ajuste nativa.

+3

ver http://blog.stevenlevithan.com/archives/faster-trim-javascript para algunos datos de rendimiento – Christoph

+2

para ser compatible con la especificación ECMA, 'trim()' 'tiene que echar a this' tipo de cadena, es decir, que' Tendré que cambiar 'this.replace (...)' a 'String (this) .replace (...)' o '('' + this) .replace (...)'; esto permite 'invocar()' o 'aplicar()' la función a valores que no sean de cadena – Christoph

+0

@Christoph: ¿quiere decir dentro de la definición de función String.prototype.trim() = ...? Hubiera esperado que "esto" ya se refiera a una cadena, ya que esta es una función de prototipo que extiende el tipo de Cadena. –

10

Aquí está la función que uso.

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

Si, en lugar de escribir un código nuevo para recortar una cadena, está viendo el código existente que llama a "strip()" y preguntándose por qué no funciona, es posible que desee comprobar si intenta incluir algo como el marco prototypejs, y asegúrese de que realmente se cargue.
Ese marco agrega una función de tira a todos los objetos de Cadena, pero si, por ejemplo, lo actualizaste y tus páginas web siguen refiriéndose al antiguo archivo .js, por supuesto que no funcionará.

+3

exactamente por qué vine aquí! – momeara

128

Para los usuarios de jQuery, ¿qué hay de $.trim(s)

64

Gumbo ya se ha señalado esto en un comentario, pero esto vale la pena repetir como una respuesta: se añadió el método trim() en JavaScript 1.8.1 y es compatible con todos los navegadores modernos (Firefox 3.5+, IE 9, Chrome 10, Safari 5.x), aunque IE 8 y versiones anteriores no lo admiten.El uso es simple:

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

Ver también:

7

Si ya está usando jQuery, entonces es posible que desee echar un vistazo a lo que jQuery.trim() ya está provisto con jQuery.

11

Una mejor polyfill del MDN que apoya la eliminación de BOM y NBSP:

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

Tenga en cuenta que la modificación de prototipos incorporados viene con un impacto en el rendimiento (debido al achique motor de JS en una serie de optimizaciones de tiempo de ejecución), y en situaciones críticas de rendimiento puede necesitar considerar la alternativa de definir myTrimFunction(string) en su lugar. Dicho esto, si se dirige a un entorno más antiguo sin soporte nativo .trim(), es probable que tenga problemas de rendimiento más importantes que tratar.

Cuestiones relacionadas