var.replace n'est pas une fonction


133

J'utilise le code ci-dessous pour essayer de couper la chaîne en Javascript mais j'obtiens l'erreur mentionnée dans le titre:

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

Éditer:

J'ai résolu le problème ... désolé, j'aurais dû mettre le code sur la façon dont je l'appelais aussi ... réalisé que je passais accidentellement l'objet du champ de formulaire lui-même plutôt que sa valeur.


21
strn'est probablement pas une chaîne
Pekka

En passant: il vous manque des guillemets autour de la regexchaîne elle-même, ce qui pourrait ne pas être bon de toute façon.
Grant Thomas

4
@MrDisappointment Javascript a des expressions régulières littérales - elles n'ont pas besoin d'être une chaîne
Gareth

1
@Closure: Vous pouvez trouver (ou souhaiter démarrer) une discussion sur english.stackexchange.com/search?q=contractions
user113716

15
Utilisez str.toString().replace(/^\s+|\s+$/g,'')plutôt.
M Rostami

Réponses:


214

Je suppose que le code qui appelle votre trimfonction ne lui passe pas réellement une chaîne.

Pour résoudre ce problème, vous pouvez faire strune chaîne, comme ceci: str.toString().replace(...)
... comme Alper a souligné ci - dessous.


39
str.toString()résolu mon problème.
alper le

Eh bien, str.toString()c'est seulement la solution si vous passez une valeur correcte qui peut être convertie avec succès en une chaîne; dans mon cas, je passais complètement la mauvaise chose. :)
Brett

J'ai aussi la même erreur, j'ai essayé toString () mais obtenir une erreur: impossible de lire la propriété "toString" est indéfinie et même pour "replace"
Hitesh Kumar

90

problèmes probables:

  • la variable est NUMBER (au lieu d'une chaîne);
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • la variable est un objet (au lieu d'une chaîne);
  • la variable n'est pas définie;

1
Merci Pour cela, je faisais face à un problème, Où, j'obtenais String dans un objet typeof. J'ai converti cet objet avec toString (). Et ça marche! Je vous remercie!
Vishwajit R. Shinde

14

Remplacer ne remplacerait pas les nombres. Il remplace uniquement les chaînes.

Cela devrait fonctionner.

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

Si vous souhaitez uniquement couper la chaîne. Vous pouvez simplement utiliser "str.trim ()"


6

Vous ne passez pas de chaîne sinon il y aurait une replaceméthode. J'espère que vous n'avez pas tapé function trim(str) { return var.replace(blah); }au lieu de return str.replace.


6

Vous devriez probablement faire quelques validations avant d'exécuter réellement votre fonction:

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

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

5

Avez-vous correctement appelé votre fonction? C'est à dire. la chose que vous passez en paramètre est-elle vraiment une chaîne?

Sinon, je ne vois pas de problème avec votre code - l'exemple ci-dessous fonctionne comme prévu

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


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

Cependant, si vous appelez votre functoin avec quelque chose de non-string, vous obtiendrez en effet l'erreur ci-dessus:

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

5

Dans le cas d'un nombre, vous pouvez essayer de convertir en chaîne:

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

3

Vous devez utiliser la méthode toString () du script java pour la conversion en chaîne avant car la méthode replace est une fonction de chaîne.


1

J'ai résolu le problème ... désolé, j'aurais dû mettre le code sur la façon dont je l'appelais aussi ... réalisé que je passais accidentellement l'objet du champ de formulaire lui-même plutôt que sa valeur.

Merci pour vos réponses quand même. :)


1
Vous pouvez modifier la question, c'est mieux que de vous donner une réponse. Oh, et pendant que vous y êtes, choisissez l'une des personnes sympathiques et acceptez sa réponse. :-)
Christopher Creutzig

2
@Christopher: Non; s'il l'a résolu lui-même, il devrait écrire sa réponse et l'accepter. C'est donc la meilleure pratique. Mettre des solutions en questions et accepter des réponses arbitraires ne l'est pas.
Courses de légèreté en orbite

@Tomalak: Il y a plusieurs bonnes réponses ici, plus anciennes que celle-ci. Je suis d'accord qu'accepter votre propre réponse si c'est la première bonne est une bonne chose ™, et je ne voulais certainement pas suggérer de mettre la solution dans la question.
Christopher Creutzig

@Christopher: La réponse acceptée doit être celle qui contient la solution utilisée par l'OP.
Courses de légèreté en orbite

0

assurez-vous que vous passez la chaîne à la méthode "replace". Eu le même problème et l'a résolu en passant une chaîne. Vous pouvez également le transformer en chaîne en utilisant la méthode toString ().

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.