Javascript Regex - sanitiziraj niz s bijelom listom


Imam vrlo osnovni problem s RegEx-om. Pokušavam očistiti polje za unos pomoću bijele liste. Pokušavam dopustiti samo brojeve i decimalu u moje polje. Ako korisnik unese nevažeći znak, želim ga ukloniti iz unosa i zamijeniti unos čistim nizom.

Mogu to natjerati da radi samo s brojevima, ali ne mogu dobiti decimalni broj u dopušteni skup znakova:

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);
            }
        }
    }
};

Radna violina

Odgovor #1

Umjesto da prolazite kroz vaš unos znak po znak i provjeravate svaki znak, možete ovo učiniti za osnovnu operaciju čišćenja:

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

PS: Ovo neće provjeriti ima li više od jedne decimalne točke u unosu (nisam siguran je li to zahtjev).