Javascript Regex - rens streng med hvidliste


Jeg har et meget grundlæggende RegEx-problem. Jeg prøver at rense et inputfelt med en whitelist. Jeg prøver kun at tillade tal og et decimaltegn i mit felt. Hvis en bruger indtaster et ugyldigt tegn, vil jeg fjerne det fra inputtet og erstatte inputtet med en ren streng.

Jeg kan få det til at fungere med kun tal, men jeg kan ikke få decimalen ind i den tilladte gruppe af tegn:

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

Arbejdende violin

Svar #1

I stedet for at gennemløbe din input karakter for karakter og validere hver karakter, kan du gøre dette for grundlæggende saniteringsoperation:

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

PS: Dette vil ikke kontrollere, om der er mere end ét decimalpunkt i inputtet (ikke sikker på, om det er kravet.