Keluarkan semua karakter non-numerik dari string dalam JavaScript


701

Pertimbangkan skenario non-DOM di mana Anda ingin menghapus semua karakter non-numerik dari string menggunakan JavaScript / ECMAScript. Setiap karakter yang berada dalam jangkauan 0 - 9harus disimpan.

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

//desired output is 1238

Bagaimana Anda mencapai ini dalam JavaScript biasa? Harap ingat ini adalah skenario non-DOM, jadi jQuery dan solusi lain yang melibatkan browser dan acara menekan tombol tidak cocok.

Jawaban:


1431

Gunakan metode string .replacedengan regex of \D, yang merupakan kelas karakter steno yang cocok dengan semua non-digit:

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

5
Terima kasih csj; di mana saja untuk mencari info lebih lanjut \D?
p.campbell

34
Ini adalah referensi regex default saya: regular-expressions.info/reference.html Kelas karakter bawaan masing-masing memiliki pelengkap bawaan . \ d \ D (digit versus segalanya kecuali digit) \ w \ W (karakter karakter versus segalanya kecuali karakter kata) \ s \ S (spasi putih versus semuanya kecuali spasi putih)
csj

3
Untuk lebih jelasnya, ini adalah sintaks untuk ganti: w3schools.com/jsref/jsref_obj_regexp.asp karena garis miring ke depan dan "g" adalah bagian dari perintah itu, bukan bagian dari RegEx.
Mike K

tidak replacebekerja dengan sintaks yang tepat ini di semua browser? Sepertinya saya ingat mendapatkan object has no method 'replace' versi IE yang lebih lama ketika menggunakan ini dengan teks yang saya ambil dengan jQuery ... atau sesuatu seperti itu.
cwd

@ cwd Saya tidak tahu apa yang didukung di browser masa lalu atau saat ini. Pertanyaannya menentukan konteks non-DOM, sehingga kemungkinan poster tersebut dibuat skrip dalam lingkungan bukan browser web.
csj

354

Jika Anda perlu ini untuk meninggalkan titik untuk angka float, gunakan ini

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

6
Adakah pakar regexp? Cara membuatnya hanya memungkinkan satu titik (sangat relevan dengan angka). Terima kasih!
Kasperi

1
apa maksudmu? beri contoh input dan output
max4ever

2
Tidak bagus: "aaa 2.9px of bbb.".replace(/[^\d.-]/g, '')2.9.Harus menghapus String yang mungkin mengelilingi Nomor ..
vsync

2
@ max4ever, Anda menyelamatkan hidup saya, terima kasih telah menangani -case number (negatif) :)
Pankaj Parkar

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


23

Anda dapat menggunakan RegExp untuk mengganti semua karakter non-digit:

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

22

Sesuatu di sepanjang garis:

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

10
Bukan jawaban yang tepat untuk pertanyaan asli, tetapi versi untuk menangani titik desimal:yourString = yourString.replace ( /[^0-9.]/g, '' );
Maxim Mai


0

Di Angular / Ionic / VueJS - Saya baru saja menemukan metode sederhana:

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

Penggunaan pada tampilan:

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

0

Sayangnya tidak ada jawaban di atas yang berfungsi untuk saya.

Saya ingin mengonversi angka mata uang dari string seperti $123,232,122.11(1232332122.11) atau USD 123,122.892(123122.892) atau mata uang seperti ₹ 98,79,112.50(9879112.5) untuk memberi saya output angka termasuk penunjuk desimal.

Harus membuat regex saya sendiri yang terlihat seperti ini:

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

0

Fungsi pendek untuk menghapus semua karakter non-numerik tetapi mempertahankan desimal (dan mengembalikan nomor):

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


-5

kami berada di 2017 sekarang Anda juga dapat menggunakan ES2016

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

atau

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

Hasilnya adalah

1238

12
Ini adalah cara yang sangat tidak efisien untuk melakukan operasi ini.
djheru

apa yang tidak efisien atau buruk di sini?
Vladislav Kostenko

5
Ini mengubah string menjadi array string karakter tunggal melalui metode cadangan, dan kemudian menerapkan fungsi filter atas JavaScript pada setiap item array, mengembalikan array string baru, untuk akhirnya bergabung dengan array yang kembali menjadi string. Regex mengambil string dan mengembalikan string dan pemrosesan dilakukan melalui kode asli.
ShortFuse
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.