var.replace não é uma função


132

Estou usando o código abaixo para tentar aparar a string em Javascript, mas estou recebendo o erro mencionado no título:

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

Editar:

Corrigi o problema .... desculpe, eu deveria ter colocado o código em como eu também estava chamando ... percebi que acidentalmente estava passando o objeto do próprio campo do formulário em vez de seu valor.


21
strprovavelmente não é uma string
Pekka

Como um aparte: estão faltando aspas em torno da regexprópria string, o que pode não ser bom de qualquer maneira.
Grant Thomas

4
@MrDisappointment Javascript tem expressões regulares literais - eles não precisam ser uma string
Gareth

1
@Closure: Você pode encontrar (ou desejar iniciar) uma discussão em english.stackexchange.com/search?q=contractions
user113716

15
Use em str.toString().replace(/^\s+|\s+$/g,'')vez disso.
M Rostami

Respostas:


211

Meu palpite é que o código que está chamando sua trimfunção não está realmente passando uma string para ele.

Para consertar isso, você pode criar struma string, como esta: str.toString().replace(...)
... como indicado acima, como sempre .


39
str.toString()corrigiu meu problema.
alper

Bem, str.toString()é apenas a solução se você estiver passando um valor correto que pode ser convertido com êxito em uma string; no meu caso, estava passando completamente a coisa errada. :)
Brett

Eu também estou recebendo o mesmo erro, tentei toString (), mas obtendo o erro: não é possível ler a propriedade "toString" é indefinida e o mesmo para "substituir"
Hitesh Kumar 13/07

89

problemas prováveis:

  • variável é NUMBER (em vez de string);
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • variável é objeto (em vez de sequência);
  • variável não está definida;

1
Obrigado por isso, eu estava enfrentando um problema, Onde, eu estava recebendo String em um objeto typeof. Eu converti esse objeto com toString (). E está funcionando! Obrigado!
Vishwajit R. Shinde

14

Substituir não substitui números. Ele substitui apenas cadeias.

Isso deve funcionar.

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

Se você deseja apenas aparar a corda. Você pode simplesmente usar "str.trim ()"


6

Você não está passando uma string, caso contrário, ela teria um replacemétodo. Espero que você não tenha digitado em function trim(str) { return var.replace(blah); }vez de return str.replace.


6

Você provavelmente deve fazer algumas validações antes de realmente executar sua função:

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

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

5

Você chamou sua função corretamente? Ou seja. a coisa que você passa como parâmetro é realmente uma string?

Caso contrário, não vejo problema com o seu código - o exemplo abaixo funciona conforme o esperado

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


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

No entanto, se você chamar seu functoin com algo não-string, você realmente obterá o erro acima:

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

5

No caso de um número, você pode tentar converter em string:

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

3

Você deve usar o método toString () do script java para a conversão em string antes porque o método replace é uma função de string.


1

Corrigi o problema .... desculpe, eu deveria ter colocado o código em como eu também estava chamando ... percebi que acidentalmente estava passando o objeto do próprio campo do formulário em vez de seu valor.

Obrigado por suas respostas de qualquer maneira. :)


1
Você pode editar a pergunta, é melhor do que dar uma resposta para si mesmo. Ah, e enquanto você está nisso, escolha uma das pessoas legais e aceite a resposta. :-)
Christopher Creutzig

2
@ Christopher: Não; se ele próprio resolveu, deveria escrever sua resposta e aceitá-la. Essa é a melhor prática. Colocar soluções em perguntas e aceitar respostas arbitrárias não é.
Lightness Races in Orbit

@Tomalak: Existem várias respostas corretas aqui, mais antigas que esta. Concordo que aceitar a sua própria resposta se for a primeira correta é uma coisa boa ™ e certamente não queria sugerir colocar a solução em questão.
Christopher Creutzig

@ Christopher: A resposta aceita deve ser a que contém a solução usada pelo OP.
Lightness Races em órbita

0

verifique se você está passando a string para o método "replace". Teve o mesmo problema e resolveu-o passando a corda. Você também pode fazer isso usando o método toString ().

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.