我在javascript中制作了一个小型计算器,用户输入他们想要借入的利率和金额,并计算他们可能获得多少奖励。
问题是我担心用户会输入符号,例如
贷款金额:£360,000 - 利率:4.6%
我不担心小数位,因为这些是必需的,似乎不会影响计算,它是像£和%这样的符号弄乱了。
是否有一种简单的方法可以从代码中删除这些符号:
<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);
}
答案 0 :(得分:21)
这是最短的:
replace(/\D/g,'');
答案 1 :(得分:8)
请注意,您应该使用正确的DOM ID通过getElementById进行引用; 您可以使用.replace()方法:
var loan_amt = document.getElementById('loan_amt');
loan_amt.value = loan_amt.value.replace(/[^0-9]/, '');
但是这也将删除浮点分隔符。我认为这是你问题的答案,但不是你问题的解决方案。要将用户输入解析为数字,您可以使用parseFloat() - 我认为这样会更正确。
答案 2 :(得分:1)
有一个非常好的插件可以使用它。例如
//在标题中包含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');
});
答案 3 :(得分:1)
您应该测试并拒绝无效值,但如果您 将一个狡猾的字符串清理成数字,那么这应该有效:
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
在this JS Bin中播放。
答案 4 :(得分:0)
试试这个
例如:
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);
现在您可以对数字进行类型转换
答案 5 :(得分:0)
这是我的解决方法:
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 :(得分:0)
执行删除除浮动以外的所有内容的功能。双点是不可能的。
灵感来自于 JulienRioux 的解决方案
function removeAllButFloatFromInput(input, floatAmount) {
$(input).on("input change paste", ({ target }) => {
let { value } = target
let allowedChars = [".", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
let newValArr = value.split("").filter(char => allowedChars.includes(char)).join("").split(".")
let newValStr = ""
if (newValArr.length == 1) {
newValStr = newValArr[0]
} else if (newValArr.length == 2 && floatAmount !== undefined) {
newValArr[1] = newValArr[1].substr(0, floatAmount)
newValStr = newValArr.join(".")
} else if (newValArr.length == 2) {
newValStr = newValArr.join(".")
} else if (floatAmount !== undefined) {
newValStr = newValArr[0] + "." + newValArr.splice(1).join("").substr(0, floatAmount)
} else {
newValStr = newValArr[0] + "." + newValArr.splice(1).join("")
}
target.value = newValStr
})
if (!!floatAmount) {
$(input).on("blur", ({ target }) => {
if (!!target.value) {
target.value = parseFloat(target.value).toFixed(floatAmount)
} else {
target.value = parseFloat(0).toFixed(floatAmount)
}
})
}
}