var.replace no es una función

133

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 ... perdón, debería haber puesto el código de 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.

Brett
fuente
21
strprobablemente no sea una cadena
Pekka
Como comentario: faltan comillas alrededor de la regexcadena en sí, lo que de todos modos podría no ser bueno.
Grant Thomas el
44
@MrDisappointment Javascript tiene expresiones regulares literales - no necesitan ser una cadena
Gareth
1
@Cierre: puede encontrar (o desea comenzar) una discusión en english.stackexchange.com/search?q=contractions
user113716
15
Usar en su str.toString().replace(/^\s+|\s+$/g,'')lugar.
M Rostami

Respuestas:

213

Supongo que el código que llama a su trimfunción en realidad no le está pasando una cadena.

Para solucionar esto, puede hacer struna cadena, como esta: str.toString().replace(...)
... como se indica más abajo.

Cierre Vaquero
fuente
39
str.toString()arreglaron mi problema
alper
Bueno, str.toString()es solo la solución si está pasando un valor correcto que se puede convertir con éxito en una cadena; en mi caso, estaba pasando la cosa equivocada por completo. :)
Brett
También recibo el mismo error, intenté toString () pero obtengo el error: no se puede leer la propiedad "toString" no está definida y lo mismo para "reemplazar"
Hitesh Kumar
90

Problemas probables:

  • la variable es NUMBER (en lugar de string);
    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;
T.Todua
fuente
1
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
14

Reemplazar no reemplazaría los 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 ()"

Kareem
fuente
6

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

meder omuraliev
fuente
6

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

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

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

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

De lo contrario, no veo un problema con su código: el ejemplo a continuación funciona como se esperaba

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


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

Sin embargo, si llama a su functoin con algo que no es una cadena, obtendrá el error anterior:

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

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

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

Debe usar el método toString () del script java para la conversión en cadena antes porque el método de reemplazo es una función de cadena.

usuario6619380
fuente
1

Solucioné el problema ... perdón, debería haber puesto el código de 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.

Gracias por sus respuestas de todos modos. :)

Brett
fuente
1
Puedes editar la pregunta, eso es mejor que darte una respuesta. Ah, y mientras lo haces, elige a una de las personas agradables y acepta su respuesta. :-)
Christopher Creutzig
2
@ Christopher: No; Si lo resolvió él mismo, debe escribir su respuesta y aceptarla. Esa es la mejor práctica. Poner soluciones en preguntas y aceptar respuestas arbitrarias no lo es.
Carreras de ligereza en órbita
@Tomalak: Aquí hay varias respuestas correctas, más antiguas que esta. Estoy de acuerdo en que aceptar su propia respuesta si es la primera correcta es algo bueno ™, y ciertamente no quería sugerir poner la solución en la pregunta.
Christopher Creutzig
@ Christopher: La respuesta aceptada debe ser la que contiene la solución que utilizó el OP.
Carreras de ligereza en órbita
0

asegúrese de pasar la cadena al método "reemplazar". Tuve el mismo problema y lo resolvió pasando una cadena. También puede hacerlo en cadena usando el método toString ().

ayaz-bin-mukhtar
fuente