جافاسكريبت تعبيرات عادية - تنظيف النص باستخدام القائمة البيضاء


لدي مشكلة بسيطة جدًا مع التعبيرات النمطية (RegEx). أحاول تنظيف حقل الإدخال باستخدام قائمة بيضاء. أحاول السماح فقط بالأرقام والفاصل العشري في الحقل الخاص بي. إذا قام المستخدم بكتابة حرف غير صالح، أريد إزالته من الإدخال واستبدال الإدخال بسلسلة نظيفة.

يمكنني جعله يعمل بالأرقام فقط، لكن لا يمكنني إدخال العلامة العشرية في مجموعة الأحرف المسموح بها:

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

ملاحظة: هذا لن يتحقق مما إذا كان هناك أكثر من فاصلة عشرية واحدة في الإدخال (لست متأكدًا مما إذا كان هذا هو المطلوب).