jQuery正则表达式删除不符合要求的数字

时间:2019-07-23 04:41:03

标签: javascript jquery regex

我正在尽力为我的正则表达式问题找到解决方案,但失败了。 当输入不是浮点数时,我想用空白(实时)替换输入。

这就是我对整数输入所做的。

$(document).on("keyup", ".onlyInteger", function(event){
if (!(event.keyCode >=37 && event.keyCode<=40)) {
    var inputVal = $(this).val();
    inputVal = inputVal.replace(/[^0-9]/gi,'');

    $(this).val( addComma(inputVal) );
}

});

我想将此代码用''替换非浮点输入,但找不到浮点数的负正则表达式

我想要得到的结果。

10,000 --> true
10 --> true
0.1 --> true
1.23234 --> true
1,231.123 --> true
0.000001 --> true
1.000 --> true


. at the beginning --> false (replace with blank)
0001.2 --> false (replace with blank)
-1.01 --> false (replace with blank)
+2.3 --> false (replace with blank)
characters --> false (replace with blank)
1.1.1.1 --> false (replace with blank)

任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

尝试regex ^(([0-9,]+)|(([1-9,]+|0)\.\d+))$

const regex = /^(([0-9,]+$)|(([1-9,]+|0)\.\d+))$/gm
const str = '10'
const numbers = regex.test(str) ? str : ''
console.log(numbers)

答案 1 :(得分:0)

使用B可以满足您的需求。

这是一个简单的测试:

^(([1-9]+0{0,})|([1-9]\d?(\,\d{3}){0,})|0)(\.\d+)?$

您可以简单地用模式测试输入值,如果没有通过,则从输入中删除该值。

此外,我建议使用var casesShouldPass = [ "10,000", "10", "0.1", "1.23234", "1,231.123", "0.000001", "1.000", // I think the followings should pass "1,234,567", "1,234,567.00", "123456", "12345.3", "10.3", "100.4", "13", "0", "9", "1,230,333,444,555,666.2" ]; var casesShouldFail = [ ".", ".123", "0001.2", "-1.01", "+2.3", "abc", "1.1.1.1", // I think the followings should fail "1,23", "1,2", "1,", "0,111", "0.", "a.0", "0.abc", ]; var body = document.querySelector("body"); var regex = /^(([1-9]+0{0,})|([1-9]\d?(\,\d{3}){0,})|0)(\.\d+)?$/; var testFunc = (arr) => { for (var i = 0; i < arr.length; i++) { var result = regex.test(arr[i]); body.innerHTML += `${arr[i]} : ${result}<br>`; } body.innerHTML += `<br>`; } testFunc(casesShouldPass); testFunc(casesShouldFail);而不是change,您可以在此代码段中尝试一下。

keyup
var regex = /^(([1-9]+0{0,})|([1-9]\d?(\,\d{3}){0,})|0)(\.\d+)?$/;

$(document).on("keyup", ".onlyInteger_keyup", function(event) {
  if (!(event.keyCode >= 37 && event.keyCode <= 40)) {
    var inputVal = $(this).val();
    if (!regex.test(inputVal)) {
      $(this).val("");
    }
  }
})


$(document).on("change", ".onlyInteger_change", function(event) {
  if (!(event.keyCode >= 37 && event.keyCode <= 40)) {
    var inputVal = $(this).val();
    if (!regex.test(inputVal)) {
      $(this).val("");
    }
  }
})