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.