var.replaceは関数ではありません


132

以下のコードを使用してJavascriptで文字列をトリミングしようとしていますが、タイトルに記載されているエラーが発生しています。

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

編集:

問題を修正しました...申し訳ありませんが、コードの呼び出し方法も記述しておく必要がありました...値ではなくフォームフィールド自体のオブジェクトを誤って渡していたことに気付きました。


21
strおそらく文字列ではない
Pekka

余談ですが、regex文字列自体を引用符で囲んでいないため、とにかく適切ではない可能性があります。
グラントトーマス

4
@MrDisappointment Javascriptにはリテラル正規表現があります-それらは文字列である必要はありません
Gareth

1
@Closure:あなたは見つけることができ(または開始したい)での議論english.stackexchange.com/search?q=contractions
user113716

15
str.toString().replace(/^\s+|\s+$/g,'')代わりに使用してください。
Mロスタミ2015

回答:


211

私の推測では、trim関数を呼び出しているコード実際には文字列を渡していません

これを修正するには、次のようstrに文字列を作成しますstr.toString().replace(...)
。... alperが以下で指摘したように。


39
str.toString()私の問題を修正しました。
alper

さて、str.toString()あなたは正常に変換することができ、正しい値渡しされている場合は唯一のソリューションです文字列が。私の場合、私は完全に間違ったことを渡していました。:)
ブレット

私も同じエラーが発生し、toString()を試しましたが、エラーが発生します。プロパティ "toString"を読み取ることができません。 "replace"は未定義で同じです
Hitesh Kumar

89

考えられる問題:

  • 変数は(文字列ではなく)NUMBERです。
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • 変数は(文字列ではなく)オブジェクトです。
  • 変数が定義されていません。

1
おかげで、私は問題に直面していました。そのオブジェクトをtoString()で変換しました。そしてそれは働いています!ありがとうございました!
Vishwajit R. Shinde 14

14

Replaceは数値を置き換えません。文字列のみを置き換えます。

これはうまくいくはずです。

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

ストリングをトリミングするだけの場合。あなたは単に「str.trim()」を使うことができます


6

文字列を渡さない場合は、replaceメソッドが含まれます。のfunction trim(str) { return var.replace(blah); }代わりに入力しないでくださいreturn str.replace


6

実際に関数を実行する前に、いくつかの検証を行う必要があります。

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

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

5

関数を適切に呼び出しましたか?つまり。パラメータとして渡すものは本当に文字列ですか?

それ以外の場合、コードに問題はありません-以下の例は期待どおりに動作します

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


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

ただし、文字列以外のもので関数を呼び出すと、実際に上記のエラーが発生します。

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

5

数値の場合は、文字列に変換してみることができます。

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

3

replaceメソッドは文字列関数であるため、文字列に変換するには、JavaスクリプトのtoString()メソッドを使用する必要があります。


1

私は問題を修正しました...申し訳ありませんが、コードの呼び出し方法も記述しておく必要がありました...値ではなくフォームフィールド自体のオブジェクトを誤って渡していたことに気付きました。

とにかくあなたの応答をありがとう。:)


1
質問を編集できます。自分に答えを出すよりはましです。ああ、そして、あなたがそれにいる間、素晴らしい人の一人を選んで、彼らの答えを受け入れてください。:-)
クリストファー・クロイツィヒ

2
@クリストファー:いいえ。自分で解決した場合は、答えを書いて受け入れなければなりません。これがベストプラクティスです。解決策を質問に入れ、任意の回答を受け入れることはできません。
オービットでの軽さのレース'29年

@Tomalak:これよりも古いいくつかの正しい答えがここにあります。最初の正解が正解である場合、自分の答えを受け入れることは良いことであることに同意します。確かに、解決策を質問に入れることを提案したくありませんでした。
Christopher Creutzig、2011年

@クリストファー:受け入れられた答えは、OPが使用したソリューションを含むものでなければなりません。
軌道の軽さのレース

0

「replace」メソッドに文字列を渡していることを確認してください。同じ問題があり、文字列を渡すことで解決しました。toString()メソッドを使用して文字列にすることもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.