仅限正则表达式数字和一个十进制问题

时间:2017-06-12 14:59:50

标签: javascript jquery

我的代码确保它只接受十进制前的3个数字和十进制后的3个数字以及仅一个小数。

有一种情况不起作用。

示例:

如果我键入12.123然后返回并键入12w.123,它将接受" w"并删除最后一个数字3.它知道它与JavaScript拆分有关。

有谁知道如何解决这个问题?

$('.numeric-decimal-63').on('input', function (event) {             
    var val = $(this).val();        
    var regex1 = new RegExp(/^(\d{1,3}|\d{0,3}\.\d{0,3})$/g);

    var regex2 = regex1.test(val);      

    if (!regex2){

        $(this).val(val.slice(0,-1));
    }

});

2 个答案:

答案 0 :(得分:1)

绝对肯定永远不会直接阻止用户输入。这就是原因:

让我们说我打字了。 1 3 w 哎呀,手指滑了,没问题:←Backspace 2 那里。现在让我们看......嗯?为什么文本框只显示12?在3去哪儿?

相反,允许用户键入他们想要的内容,并且只有在输入完成后(例如,在change事件上),您应该验证输入并通知用户它是否不合规。

HTML5为您完成此任务:

<input type="number" min="0" max="999.999" step="0.001" />

答案 1 :(得分:0)

$(this).val(val.slice(0,-1));

将删除最后一个键,因此“123w1”将删除“1”。您可能想要回到之前的状态:

var state="0";
$('.numeric-decimal-63').on('input', function (event) {             
var val = $(this).val();        
var regex1 = new RegExp(/^(\d{1,3}|\d{0,3}\.\d{0,3})$/g);
if (!regex1.test(val) && val!==""){
    $(this).val(state);
    return;
}
state=val;
});