10

在输入只允许使用 jquery 库的浮点数时,我很痛苦。我的代码无法阻止字符“。” 当它成为第一个输入时,任何人都可以指导我解决这个问题吗?

$('.filterme').keypress(function(eve) {
   if (    ( eve.which != 46 || $(this).val().indexOf('.') != -1 ) 
        && ( eve.which <  48 || eve.which > 57 ) 
        || ( $(this).val().indexOf('.') == 0) 
      )
   {
       eve.preventDefault();
   }
});​
4

7 回答 7

36

我用这个 - 适用于键盘输入或复制和粘贴

$('input.float').on('input', function() {
  this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*?)\..*/g, '$1');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<input type="text" class="float" />

解释:

  • 第一个正则表达式替换任何不是数字或小数的东西。
  • 第二个正则表达式删除第二个小数的任何实例。
于 2015-08-31T21:46:05.493 回答
8

我使用 jQuery Caret 插件过滤第一个位置输入。否则,一旦输入了点,再检查它的位置就太晚了。我尝试检查该点,然后删除该点,但它看起来不太好。

jQuery 插入符号插件: http ://examplet.buss.hk/js/jquery.caret.min.js

我做了什么:

http://jsfiddle.net/FCWrE/422/

尝试一下 :)

$('.filterme').keypress(function(eve) {
  if ((eve.which != 46 || $(this).val().indexOf('.') != -1) && (eve.which < 48 || eve.which > 57) || (eve.which == 46 && $(this).caret().start == 0)) {
    eve.preventDefault();
  }

  // this part is when left part of number is deleted and leaves a . in the leftmost position. For example, 33.25, then 33 is deleted
  $('.filterme').keyup(function(eve) {
    if ($(this).val().indexOf('.') == 0) {
      $(this).val($(this).val().substring(1));
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/caret/1.0.0/jquery.caret.min.js"></script>
<input type="text" class="filterme">

于 2012-04-14T04:46:43.937 回答
3

正则表达式也是我的建议。如果该值作为数字而不是字符串传递,则可以使用 .toString 将其更改为字符串并使用正则表达式对其进行验证。例如:

var str = value.toString();
if(!str.match(/^-?[0-9]*[.][0-9]+$/)) {
    alert("Value must be a float number");
    return;
}
return value;

如果传递的值是浮点数,则上述正则表达式将匹配。它接受负数和正数。如果您只想接受正数,只需删除“-?” 从表达式。如果该值只是零“0”而没有任何小数点,它也会失败。如果您想接受零,只需将其作为条件添加到“if”语句中。

您可以使用上述验证和 onchange 事件来防止用户输入非浮点数。

于 2012-04-14T04:31:49.663 回答
1

为什么不使用Regular Expression

^[0-9]*[.][0-9]+$

在这里阅读代码和测试..

于 2012-04-14T04:09:10.433 回答
1

您可以使用以下方法,在onkeypress事件中调用。下面是 JS 方法后跟的 HTML 片段:

input type="text" onkeypress ="return isNumberKey(event)" id="floor"

function isNumberKey(evt){
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode == 46){
        var inputValue = $("#floor").val();
        var count = (inputValue.match(/'.'/g) || []).length;
        if(count<1){
            if (inputValue.indexOf('.') < 1){
                return true;
            }
            return false;
        }else{
            return false;
        }
    }
    if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)){
        return false;
    }
    return true;
}

注意:上面的代码还确保您在输入中只输入一个小数。

于 2016-09-26T05:57:58.663 回答
0

这是我的解决方案,也适用于负数(小提琴

$("input").keypress(function (event) {
    var inputCode = event.which;
    var currentValue = $(this).val();
    if (inputCode > 0 && (inputCode < 48 || inputCode > 57)) {
        if (inputCode == 46) {
            if (getCursorPosition(this) == 0 && currentValue.charAt(0) == '-') return false;
            if (currentValue.match(/[.]/)) return false;
        } 
        else if (inputCode == 45) {
            if (currentValue.charAt(0) == '-') return false;
            if (getCursorPosition(this) != 0) return false;
        } 
        else if (inputCode == 8) return true;
        else return false;

    } 
    else if (inputCode > 0 && (inputCode >= 48 && inputCode <= 57)) {
        if (currentValue.charAt(0) == '-' && getCursorPosition(this) == 0) return false;
    }
});
function getCursorPosition(element) {
    if (element.selectionStart) return element.selectionStart;
    else if (document.selection)
    {
        element.focus();
        var r = document.selection.createRange();
        if (r == null) return 0;

        var re = element.createTextRange(),
            rc = re.duplicate();
        re.moveToBookmark(r.getBookmark());
        rc.setEndPoint('EndToStart', re);
        return rc.text.length;
    }
    return 0;
}
于 2015-10-08T16:09:03.883 回答
0

这对我有用:

var str = document.getElementById('product_'+id_product).value;
if( !str.match(/^[0-9]*([.,][0-9]+)?$/) ) {
 console.log("Value must be a number or float number");
}else{
 console.log("The number is valid");
}

我希望这可以帮助某人。问候!

于 2019-03-25T00:03:45.533 回答