50

我用 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);
}
4

7 回答 7

51

请注意,您应该使用正确的 DOM id 来通过 getElementById 进行引用。您可以为此使用.replace()方法:

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

但这也会删除浮点分隔符。这是您问题的答案,但不是您问题的解决方案。要将用户输入解析为数字,您可以使用parseFloat() - 我认为它会更合适。

于 2013-08-07T09:31:50.083 回答
41

这是最短的:

replace(/\D/g,'');
于 2017-11-21T14:54:20.813 回答
3

这是我的解决方案:

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
于 2019-03-10T00:34:32.037 回答
1

You should probably test for and reject invalid values but if you have to clean a dodgy string into a number then this should work:

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

Play with it in this JS Bin.

于 2013-08-07T11:17:44.537 回答
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');    
  });

请参阅下面 的检查http://www.decorplanit.com/plugin/

于 2013-08-07T09:32:42.800 回答
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);

现在您可以将类型转换为数字

于 2013-08-07T09:47:26.743 回答
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)
      }
    })
  }
}
于 2021-06-08T17:00:22.990 回答