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.

Brett
quelle
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.

ClosureCowboy
quelle
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;
T.Todua
quelle
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.

Kareem
quelle
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.

meder omuraliev
quelle
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,'');
}
gion_13
quelle
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
Dave Vogt
quelle
5

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

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

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

user6619380
quelle
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. :) :)

Brett
quelle
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