Удаление всего, кроме чисел в строке

Я сделал небольшой калькулятор в javascript, где пользователи вводят процентную ставку и сумму, которую они хотят заимствовать, и вычисляют, сколько стимулов они могут получить.

Проблема в том, что я беспокоюсь, что пользователи будут вводить символы, например.

Сумма кредита: £ 360,000 - Процентная ставка: 4,6%

Я не беспокоюсь о десятичных знаках, поскольку они необходимы и, похоже, не влияют на вычисления, это символы, подобные E и%, которые испортили вещи.

Есть ли простой способ вывести эти символы из кода:

<td><input type="text" name="loan_amt" style="background-color:#FFF380;"></td>
<td><input type="text" name="interest_rate" style="background-color:#FFF380;"></td>


function Calculate()
{
    var loan_amt = document.getElementById('loan_amt').value;
    //this is how i get the loan amount entered
    var interest_rate = document.getElementById('interest_rate').value; 
    //this is how i get the interest rate

    alert (interest_rate);
}

Ответ 1

Обратите внимание, что вы должны использовать правильный идентификатор DOM для ссылки через getElementById. Для этого вы можете использовать метод .replace() :

var loan_amt = document.getElementById('loan_amt');
loan_amt.value = loan_amt.value.replace(/[^0-9]/g, '');

Но это также удалит разделитель с плавающей точкой. Это ответ на ваш вопрос, но не решение вашей проблемы. Чтобы проанализировать пользовательский ввод как число, вы можете использовать parseFloat() - я думаю, что это будет более подходящим.

Ответ 2

Это самое короткое:

replace(/\D/g,'');

Ответ 3

есть очень хороший плагин, который вы можете использовать. Например

//включить jQuery.js и autoNumeric-1.8.3.js файлы javascript в заголовок.

    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"> </script>
    <script src="autoNumeric-1.8.0.js" type=text/javascript> </script>

  // this example uses the id selector & no options passed    
  jQuery(function($) {
      $('#someID_defaults').autoNumeric('init');    
  });

см. ниже http://www.decorplanit.com/plugin/

Ответ 4

Вероятно, вы должны проверить и отклонить недопустимые значения, но если вам нужно очистить изворотливую строку в число, то это должно работать:

var inStr = "a12ab.c34...h.re567";
var justOneDot = inStr.replace(/[.](?=.*?\.)/g, '');//look-ahead to replace all but last dot
var outStr = parseFloat(justOneDot.replace(/[^0-9.]/g,'')).toFixed(2); //parse as float and round to 2dp 
// = 1234.57

Играйте с ним в этот JS Bin.

Ответ 5

Вот мое решение:

const filterNum = (str) => {
  const numericalChar = new Set([ ".",",","0","1","2","3","4","5","6","7","8","9" ]);
  str = str.split("").filter(char => numericalChar.has(char)).join("");
  return str;
}

console.log(filterNum("143.33$"));
// 143.33

Ответ 6

попробуйте это

Например:

var a="4.52%"
var stringLength = a.length;
var lastChar = a.charAt(stringLength - 1); 

if(lastChar.match(/[^\w\s]/)) {
    a=a.substring(0,stringLength - 1);
}

alert(a);

Теперь вы можете прибегнуть к типу