JavaScript'te dizeden sayısal olmayan tüm karakterleri şeritle


702

JavaScript / ECMAScript kullanarak bir dizeden sayısal olmayan tüm karakterleri kaldırmak istediğiniz DOM dışı bir senaryo düşünün. Aralıktaki tüm karakterler 0 - 9korunmalıdır.

var myString = 'abc123.8<blah>';

//desired output is 1238

Bunu sade JavaScript ile nasıl başardınız? Lütfen bunun DOM olmayan bir senaryo olduğunu unutmayın, bu nedenle jQuery ve tarayıcı ve tuşa basma olaylarını içeren diğer çözümler uygun değildir.

Yanıtlar:


1432

Dizenin .replaceyöntemini, \Dtüm basamak olmayan karakterlerle eşleşen bir stenografi sınıfı olan regex ile kullanın :

myString = myString.replace(/\D/g,'');

5
Teşekkürler csj; hakkında daha fazla bilgi edinmek için herhangi bir yer \D?
p.campbell

34
Bu benim varsayılan normal ifade referansım: regular-expressions.info/reference.html Yerleşik karakter sınıflarının her birinde yerleşik tamamlayıcılar bulunur. \ d \ D (rakamlar, rakamlar hariç her şeye karşı) \ w \ W (kelime karakterleri hariç her şey yerine kelime karakterleri) \ s \ S (beyaz boşluk dışında her şeye karşı boşluk)
csj

3
Açık olmak gerekirse, değiştirilecek sözdizimi şöyledir: w3schools.com/jsref/jsref_obj_regexp.asp çünkü eğik çizgi ve "g" RegEx'in bir parçası değil, bu komutun bir parçasıdır.
Mike K

does replacetüm tarayıcılarda bu tam sözdizimi ile çalışır? object has no method 'replace' jQuery ile yakalanan metin ile kullanırken IE eski bir sürümü elde hatırlıyorum gibi görünüyor ... ya da böyle bir şey.
cwd

@cwd Geçmişte veya şu anki tarayıcılarda nelerin desteklendiğini bilmiyorum. Soru, DOM olmayan bir bağlam belirlediğinden, posterin web tarayıcısı olmayan bir ortamda komut dosyası oluşturması muhtemeldir.
csj

355

Kayan noktalı sayıların noktasını bırakmak için buna ihtiyacınız varsa, bunu kullanın

var s = "-12345.50 €".replace(/[^\d.-]/g, ''); // gives "-12345.50"

6
Herhangi bir normal ifade uzmanı var mı? Bunun nasıl yapılacağı sadece tek bir noktaya izin verir (sayılarla çok alakalı). Teşekkürler!
Kasperi

1
ne demek istiyorsun? girdi ve çıktı örneği verin
max4ever

2
İyi değil: "aaa 2.9px of bbb.".replace(/[^\d.-]/g, '')2.9.Bir Sayı çevreleyen herhangi bir Dize şerit gerekir ..
vsync

2
@ max4ever Hayatımı kurtardın, -(negatif) sayı davasını ele aldığınız için teşekkürler :)
Pankaj Parkar

4
@Kasperi belki:parseFloat("-1234.5.50 €".replace(/[^\d.-]/g, ''))
A. Genedy


23

Rakam olmayan tüm karakterleri değiştirmek için bir RegExp kullanabilirsiniz :

var myString = 'abc123.8<blah>';
myString = myString.replace(/[^\d]/g, ''); // 1238

22

Çizgileri boyunca bir şey:

yourString = yourString.replace ( /[^0-9]/g, '' );

10
Orijinal soruya tam bir cevap değil, ondalık noktayı işlemek için bir sürüm:yourString = yourString.replace ( /[^0-9.]/g, '' );
Maxim Mai


0

Açısal / İyonik / VueJS - Ben sadece basit bir yöntem ile geldi:

stripNaN(txt: any) {
    return txt.toString().replace(/[^a-zA-Z0-9]/g, "");
}

Görünüm üzerinde kullanım:

<a [href]="'tel:'+stripNaN(single.meta['phone'])" [innerHTML]="stripNaN(single.meta['phone'])"></a>

0

Ne yazık ki yukarıdaki cevapların hiçbiri benim için işe yaramadı.

Bana ondalık işaretçisi de dahil olmak üzere bir sayı çıktısı vermek için $123,232,122.11(1232332122.11) veya USD 123,122.892(123122.892) gibi dizelerden para birimi numaralarını veya 9898112.5 gibi herhangi bir para birimini ₹ 98,79,112.50dönüştürmek istiyordum.

Böyle bir şey gibi kendi regex yapmak zorunda kaldı:

str = str.match(/\d|\./g).join('');

0

Tüm sayısal olmayan karakterleri kaldırmak ancak ondalık sayıyı korumak (ve sayıyı döndürmek) için kısa işlev:

parseNum = str => +str.replace(/[^.\d]/g, '');
let str = 'a1b2c.d3e';
console.log(parseNum(str));


-5

içinde bulunduğumuz 2017 şimdi de kullanabilirsiniz ES2016

var a = 'abc123.8<blah>';
console.log([...a].filter( e => isFinite(e)).join(''));

veya

console.log([...'abc123.8<blah>'].filter( e => isFinite(e)).join(''));  

Sonuç

1238

12
Bu işlem hakkında çok verimsiz bir yöntemdir.
djheru

burada verimsiz veya kötü olan ne?
Vladislav Kostenko

5
Dizeyi yedek bir yöntemle tek karakterli dizelerden oluşan bir diziye dönüştürür ve daha sonra her dizi öğesinde JavaScript üzerinden filtre işlevi uygulayarak yeni bir dize dizisi döndürerek son olarak diziyi tekrar dizeye birleştirir. Regex bir dize alır ve bir dize döndürür ve işlem yerel kod ile yapılır.
ShortFuse
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.