var.replace bir işlev değil


133

Javascript'teki dizeyi kırpmak için aşağıdaki kodu kullanıyorum, ancak başlıkta belirtilen hatayı alıyorum:

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

Düzenle:

Sorunu düzelttim .... üzgünüm, kodu nasıl çağırdığıma koymalıydım .... yanlışlıkla form alanının nesnesini değerinden ziyade kendisinin geçtiğini fark ettim.


21
strmuhtemelen dizge değil
Pekka

Bir kenara: regexdizenin etrafındaki tırnak işaretlerini kaçırıyorsunuz , ki bu zaten iyi olmayabilir.
Grant Thomas

4
@MrDisappointment Javascript normal düzenli ifadelere sahiptir - bunların bir dizge olması gerekmez
Gareth


15
str.toString().replace(/^\s+|\s+$/g,'')Bunun yerine kullanın .
M Rostami

Yanıtlar:


214

Benim tahminim sizin aradığını kod olmasıdır trimişlevi olan değil aslında bir dize geçirerek.

Bunu düzeltmek için aşağıdaki strgibi bir dizge oluşturabilirsiniz : str.toString().replace(...)
... alper'in aşağıda işaret ettiği gibi.


39
str.toString()sorunumu çözdüm.
alper

Eh, str.toString()başarıyla dönüştürülebilir bir doğru değeri geçiyoruz tek çözüm için bir dize; benim durumumda tamamen yanlış olanı geçiyordum. :)
Brett

Aynı hatayı da alıyorum, toString () denedim ama hata alıyorum: "toString" özelliği okunamıyor ve "değiştir" için aynı
Hitesh Kumar

90

olası sorunlar:

  • değişken NUMBER (dize yerine);
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • değişken nesnedir (dize yerine);
  • değişken tanımlanmadı;

1
Teşekkürler Bunun için, bir sorunla karşı karşıyaydım, Nerede, String'i bir typeof nesnesinde alıyordum. Bu nesneyi toString () ile dönüştürdüm. Ve çalışıyor! Teşekkür ederim!
Vishwajit R. Shinde

14

Değiştirmek sayıların yerini almaz. Yalnızca dizeleri değiştirir.

Bu çalışmalı.

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

Sadece dizeyi kırpmak istiyorsanız. Basitçe "str.trim ()" kullanabilirsiniz


6

Bir dizgeyi iletmiyorsunuz, aksi takdirde bir replaceyöntemi olacaktır. Umarım function trim(str) { return var.replace(blah); }yerine yazmamışsındır return str.replace.


6

İşlevinizi gerçekten çalıştırmadan önce muhtemelen bazı doğrulamalar yapmalısınız:

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

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

5

Görevinizi düzgün çağırdınız mı? Yani. parametre olarak ilettiğiniz şey gerçekten bir dizge mi?

Aksi takdirde, kodunuzla ilgili bir sorun görmüyorum - aşağıdaki örnek beklendiği gibi çalışıyor

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


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

Bununla birlikte, functoin'i dize olmayan bir şeyle çağırırsanız, gerçekten yukarıdaki hatayı alırsınız:

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

5

Bir sayı olması durumunda dizeye dönüştürmeyi deneyebilirsiniz:

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

3

Daha önce dizeye dönüştürmek için java betiğinin toString () Yöntemini kullanmalısınız, çünkü replace yöntemi bir dizge işlevidir.


1

Sorunu düzelttim .... üzgünüm, kodu nasıl çağırdığıma koymalıydım .... yanlışlıkla form alanının nesnesinin değeri yerine kendisinin geçtiğini fark ettim.

Yine de yanıtlarınız için teşekkürler. :)


1
Soruyu düzenleyebilirsiniz, bu kendinize bir cevap vermekten daha iyidir. Oh, ve hazır oradayken, iyi insanlardan birini seç ve onların cevabını kabul et. :-)
Christopher Creutzig

2
@Christopher: Hayır; kendisi çözdüyse cevabını yazmalı ve kabul etmelidir. Bu ÇOK en iyi uygulamadır. Sorulara çözüm getirmek ve keyfi cevapları kabul etmek değildir.
Yörüngede Hafiflik Yarışları

@Tomalak: Burada bundan daha eski birkaç doğru cevap var. İlk doğruysa kendi cevabınızı kabul etmenin iyi bir şey olduğunu kabul ediyorum ™ ve kesinlikle çözümü soruya koymayı önermek istemedim.
Christopher Creutzig

@Christopher: Kabul edilen cevap, OP'nin kullandığı çözümü içeren cevap olmalıdır.
Orbit'te Hafiflik Yarışları

0

dizeyi "değiştir" yöntemine geçirdiğinizden emin olun. Aynı sorunu yaşadım ve dizeyi geçerek çözdüm. Ayrıca toString () yöntemini kullanarak dizeye dönüştürebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.