var.replace no es una función

3 minutos de lectura

avatar de usuario
Brett

Estoy usando el siguiente código para intentar recortar la cadena en Javascript, pero recibo el error mencionado en el título:

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

Editar:

Solucioné el problema… lo siento, debería haber puesto el código sobre cómo lo estaba llamando también… me di cuenta de que accidentalmente estaba pasando el objeto del campo de formulario en lugar de su valor.

  • str probablemente no es una cadena

    – Peka

    23 de enero de 2011 a las 17:28

  • Aparte: te faltan citas alrededor del regex cadena en sí, lo que podría no ser bueno de todos modos.

    – Grant Thomas

    23 de enero de 2011 a las 17:30


  • @MrDisappointment Javascript tiene expresiones regulares literales; no es necesario que sean una cadena

    – Gareth

    23 de enero de 2011 a las 17:31

  • @Cierre: Puede encontrar (o desear iniciar) una discusión en english.stackexchange.com/search?q=contracciones

    – usuario113716

    23 de enero de 2011 a las 18:23


  • Usar str.toString().replace(/^\s+|\s+$/g,'') en cambio.

    – M Rostami

    25 de febrero de 2015 a las 7:42

avatar de usuario
CierreVaquero

Mi conjetura es que el código que está llamando a su trim la función es no en realidad pasándole una cadena.

Para arreglar esto, puedes hacer str una cadena, como esta: str.toString().replace(...)
… como alper señaló a continuación.

  • str.toString() arregló mi problema

    – alper

    14 de junio de 2017 a las 12:41

  • Bien, str.toString() es solo la solución si está pasando un valor correcto que se puede convertir con éxito a una cuerda; en mi caso estaba pasando la cosa completamente equivocada. 🙂

    – Brett

    06/03/2018 a las 18:21

  • También recibí el mismo error, probé toString() pero obtuve el error: no se puede leer la propiedad “toString” no está definida y lo mismo para “reemplazar”

    –Hitesh Kumar

    13 de julio de 2020 a las 14:28

  • ¡Gran suposición! Resultó ser exactamente lo que me estaba perdiendo. Funcionó muy bien agregando .toString().

    – Pegues

    28 de diciembre de 2020 a las 1:32

  • Funciona para mi. agregué toString().replace(….) y funciona.

    – Todo es amor

    30 de junio de 2021 a las 0:47

avatar de usuario
T.Todua

problemas probables:

  • variable es NÚMERO (en lugar de cadena);

    num=35; num.replace(3,'three'); =====> ERROR

    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!

    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • variable es objeto (en lugar de cadena);
  • la variable no está definida;

  • Gracias por esto, estaba enfrentando un problema, donde estaba obteniendo String en un tipo de objeto. Convertí ese objeto con toString(). ¡Y está funcionando! ¡Gracias!

    – Vishwajit R. Shinde

    8 de diciembre de 2014 a las 5:20

avatar de usuario
Kareem

Reemplazar no reemplazaría números. Solo reemplaza cadenas.

Esto debería funcionar.

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

Si solo quieres recortar la cuerda. Simplemente puede usar “str.trim()”

No está pasando una cadena, de lo contrario tendría un replace método. espero que no hayas escrito function trim(str) { return var.replace(blah); } en vez de return str.replace.

avatar de usuario
gion_13

Probablemente debería hacer algunas validaciones antes de ejecutar su función:

function trim(str) {
    if(typeof str !== 'string') {
        throw new Error('only string parameter supported!');
    }

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

avatar de usuario
david vogt

¿Llamaste a tu función correctamente? Es decir. ¿Lo que pasa como parámetro es realmente una cadena?

De lo contrario, no veo ningún problema con su código; el siguiente ejemplo funciona como se esperaba

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


trim('    hello   ');  // --> 'hello'

Sin embargo, si llama a su función con algo que no sea una cadena, obtendrá el error anterior:

trim({});  // --> TypeError: str.replace is not a function

avatar de usuario
JC Gras

En el caso de un número, puede intentar convertirlo en cadena:

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

¿Ha sido útil esta solución?