仅允许数字输入,包括负数和小数

时间:2013-11-06 09:50:59

标签: javascript validation mobile-safari numeric

This question处理只允许在输入文本字段中输入数字字符。我需要做同样的事情,除了必须允许负号和小数。该解决方案还需要在Mobile Safari中运行,适用于 iOS 6 iOS 7

我已经测试了基于检查 keyup 事件处理程序中的密钥的已接受解决方案,但此解决方案不适用于我的 iPad 因为它允许输入以下字符:

()$&@!

以下代码基于this solution

('input.numeric').keyup(function(e) {
    this.value = (this.value.replace(/[^0-9.\,-]/g, ''));
});

尽管此代码在我测试的桌面浏览器(例如Chrome)中运行良好,但在 Mobile Safari 上,它似乎效果不佳。在 iOS 5 上,这允许输入数字字符和减号,但是它会导致光标位置奇怪,光标经常出现在输入的字符之前。在 iOS 6 上,出于某种原因,这不允许输入减号,只允许输入数字字符。

是否有人在 Mobile Safari 上拥有可正常运行的解决方案。我在这里寻找一个纯粹的Javascript解决方案,或者只依赖于 jQuery 的解决方案。请不要回答“使用此库或该库”或对 Javascript 验证的评论不安全。

1 个答案:

答案 0 :(得分:0)

看看这个......

var prevVal = '';
$(".numericValue").on("input", function (evt) {
    var self = $(this);
    if (self.val().match(/^-?\d*(\.(?=\d*)\d*)?$/) !== null) {
        prevVal = self.val()
    } else {
        self.val(prevVal);
    }
    if ((evt.which != 46 || self.val().indexOf('.') != -1) && (evt.which < 48 || evt.which > 57) && (evt.which != 45 && self.val().indexOf("-") == 0)) {
        evt.preventDefault();
    }
});