Vyhledávání na webu

Javascript Regex - sanitizovat řetězec s bílým seznamem


Mám velmi základní problém s regulárními výrazy. Snažím se očistit vstupní pole pomocí bílé listiny. Snažím se do pole povolit pouze čísla a desetinnou tečku. Pokud uživatel zadá neplatný znak, chci ho odstranit z vstupu a nahradit vstup čistým řetězcem.

Dokážu to rozběhnout pouze s čísly, ale nemohu dostat desetinnou čárku do povolené množiny znaků:

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

Funkční housle

Odpověď č. 1

Místo toho, abyste procházeli svůj vstup znak po znaku a ověřovali každý znak, můžete toto udělat pro základní operaci sanitace:

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

PS: Toto nezkontroluje, zda je ve vstupu více než jedna desetinná čárka (nejsem si jistý, jestli je to požadavek).