網站搜尋

Javascript 正則表達式 - 使用白名單清理字串


我有一個非常基本的正則表達式問題。我正在嘗試使用白名單清理輸入欄位。我只想允許數字和小數點進入我的欄位。如果用戶輸入了無效字符,我希望將其從輸入中移除,並用乾淨的字串替換輸入。

我可以讓它只用數字運作,但我無法將小數點加入允許的字元池中:

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

工作小提琴

答案#1

與其逐個字元迴圈處理你的輸入並驗證每個字元,你可以對基本的清理操作這樣做:

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

附註: 這將不會檢查輸入中是否有多於一個小數點(不確定這是否是要求)。