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.
