Javascript Regex - membersihkan string dengan senarai putih


Saya mempunyai masalah RegEx yang sangat asas. Saya cuba menapis medan input dengan senarai putih. Saya cuba untuk membenarkan hanya nombor dan perpuluhan dalam medan saya. Jika pengguna menaip aksara yang tidak sah, saya ingin menyingkirkannya dari input dan menggantikan input tersebut dengan rentetan yang bersih.

Saya boleh menjadikannya berfungsi dengan hanya nombor, tetapi saya tidak dapat memasukkan perpuluhan ke dalam kumpulan aksara yang dibenarkan:

var sanitize = function(inputValue) {
    var clean = "",
        numbersOnly = /[^0-9]/g;  // only numbers & a decimal place
    if (inputValue) {
        if (numbersOnly.test(inputValue)) { 
            // if test passes, there are bad characters
            for (var i = 0; i < inputValue.length; i++) {
                clean += (!numbersOnly.test(inputValue.charAt(i))) ? inputValue.charAt(i) : "";
            }
            if (clean != inputValue) {
                makeInputBe(clean);
            }
        }
    }
};

Biola yang berfungsi

Jawapan #1

Daripada mengulang input anda satu persatu dan mengesahkan setiap aksara, anda boleh melakukan ini untuk operasi pembersihan asas:

var s = '123abc.48@#'
s = s.replace(/[^\d.]+/g, '');
//=> 123.48

PS: Ini tidak akan memeriksa jika terdapat lebih daripada 1 titik perpuluhan dalam input (tidak pasti jika itu adalah keperluannya).