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.
