Удаление всего, кроме чисел в строке
Я сделал небольшой калькулятор в 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);
Теперь вы можете прибегнуть к типу