var.replace ist keine Funktion


132

Ich verwende den folgenden Code, um zu versuchen, die Zeichenfolge in Javascript zu kürzen, erhalte jedoch den im Titel genannten Fehler:

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

Bearbeiten:

Ich habe das Problem behoben. Tut mir leid, ich hätte den Code so eingeben sollen, wie ich ihn auch aufgerufen habe. Mir wurde klar, dass ich versehentlich das Objekt des Formularfelds selbst und nicht dessen Wert übergeben habe.


21
strist wahrscheinlich keine Saite
Pekka

Nebenbei bemerkt: Sie vermissen Anführungszeichen um die regexZeichenfolge selbst, was ohnehin nicht gut sein könnte.
Grant Thomas

4
@ MrDisappointment Javascript hat wörtliche reguläre Ausdrücke - sie müssen keine Zeichenfolge sein
Gareth

1
@Closure: Sie können (oder möchten) eine Diskussion unter english.stackexchange.com/search?q=contractions
user113716

15
Verwenden Sie str.toString().replace(/^\s+|\s+$/g,'')stattdessen.
M Rostami

Antworten:


209

Ich vermute, dass der Code, der Ihre trimFunktion aufruft, keine Zeichenfolge an sie übergibt.

Um dies zu beheben, können Sie streine Zeichenfolge wie folgt erstellen : str.toString().replace(...)
... wie unten angegeben.


39
str.toString()mein Problem behoben.
Alper

Dies str.toString()ist nur dann die Lösung, wenn Sie einen korrekten Wert übergeben, der erfolgreich in eine Zeichenfolge konvertiert werden kann . in meinem Fall habe ich das Falsche insgesamt bestanden. :)
Brett

Ich habe auch den gleichen Fehler erhalten, ich habe versucht, toString (), aber es wurde ein Fehler
angezeigt

88

wahrscheinliche Probleme:

  • Variable ist NUMBER (anstelle von String);
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • Variable ist Objekt (anstelle von Zeichenfolge);
  • Variable ist nicht definiert;

1
Vielen Dank Dafür hatte ich ein Problem: Ich habe String in einem Objekttyp erhalten. Ich habe dieses Objekt mit toString () konvertiert. Und es funktioniert! Danke dir!
Vishwajit R. Shinde

14

Ersetzen würde keine Zahlen ersetzen. Es werden nur Zeichenfolgen ersetzt.

Das sollte funktionieren.

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

Wenn Sie nur die Saite kürzen möchten. Sie können einfach "str.trim ()" verwenden.


6

Sie übergeben keinen String, sonst hätte er eine replaceMethode. Ich hoffe du hast nicht function trim(str) { return var.replace(blah); }statt getippt return str.replace.


6

Sie sollten wahrscheinlich einige Überprüfungen durchführen, bevor Sie Ihre Funktion tatsächlich ausführen:

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

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

5

Haben Sie Ihre Funktion richtig aufgerufen? Dh. Ist das, was Sie als Parameter übergeben, wirklich eine Zeichenfolge?

Ansonsten sehe ich kein Problem mit Ihrem Code - das folgende Beispiel funktioniert wie erwartet

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


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

Wenn Sie jedoch Ihre Funktion mit etwas Nicht-String aufrufen, wird in der Tat der obige Fehler angezeigt:

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

5

Im Falle einer Zahl können Sie versuchen, in eine Zeichenfolge umzuwandeln:

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

3

Sie sollten die toString () -Methode des Java-Skripts für die Konvertierung in eine Zeichenfolge verwenden, da die Ersetzungsmethode eine Zeichenfolgenfunktion ist.


1

Ich habe das Problem behoben. Tut mir leid, ich hätte den Code so eingeben sollen, wie ich ihn auch aufgerufen habe. Ich habe festgestellt, dass ich versehentlich das Objekt des Formularfelds selbst übergeben habe und nicht dessen Wert.

Trotzdem danke für deine Antworten. :) :)


1
Sie können die Frage bearbeiten, das ist besser, als sich selbst eine Antwort zu geben. Oh, und wenn Sie schon dabei sind, wählen Sie einen der netten Leute aus und akzeptieren Sie deren Antwort. :-)
Christopher Creutzig

2
@Christopher: Nein; Wenn er es selbst gelöst hat, sollte er seine Antwort schreiben und akzeptieren. Das ist SO Best Practice. Lösungen in Fragen zu stellen und willkürliche Antworten zu akzeptieren, ist nicht so.
Leichtigkeitsrennen im Orbit

@Tomalak: Hier gibt es mehrere richtige Antworten, die älter sind als diese. Ich bin damit einverstanden, dass es eine gute Sache ist, Ihre eigene Antwort zu akzeptieren, wenn es die erste richtige ist, und wollte auf keinen Fall vorschlagen, die Lösung in die Frage aufzunehmen.
Christopher Creutzig

@Christopher: Die akzeptierte Antwort sollte die sein, die die vom OP verwendete Lösung enthält.
Leichtigkeitsrennen im Orbit
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.