Javascript Regex - sanera sträng med vitlista


Jag har ett mycket grundläggande RegEx-problem. Jag försöker sanera ett inmatningsfält med en vitlista. Jag försöker endast tillåta siffror och ett decimaltecken i mitt fält. Om en användare skriver ett ogiltigt tecken vill jag ta bort det från inmatningen och ersätta inmatningen med en ren sträng.

Jag kan få det att fungera med endast siffror, men jag kan inte få decimalkommat att ingå i den tillåtna teckenmängden:

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

Arbetande fiol

Svar #1

Istället för att loopa igenom din inmatning tecken för tecken och validera varje tecken kan du göra detta för grundläggande saneringsoperation:

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

PS: Detta kommer inte att kontrollera om det finns mer än 1 decimalpunkt i indata (inte säker på om det är kravet.