除去字符串中的数字以外的所有内容

时间:2013-08-07 09:27:19

标签: javascript regex

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

7 个答案:

答案 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');    
  });

见下面的检查 http://www.decorplanit.com/plugin/

答案 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)
      }
    })
  }
}