2017-06-12 88 views
0

我有代码将确保它只接受小数点前的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)); 
    } 

}); 
+0

'$(本).VAL(val.slice(0,-1));'这消除了最后一个字符,即使你在中间 – user3080953

+0

型@Tretiak是否想要删除输入中不需要的'w'? – Kayla

+0

是的,我是。由于用户类型I只需要数字值和一位小数以及小数点前后只有3位数 – Tretiak

回答

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; 
}); 
+0

您的解决方案将所有内容抹除并将其设置为零。我只是想让这个角色变成空白。 – Tretiak

+0

公平地说,我在var val之前的var状态=“0”内,因为它永远不会被设置。我错了吗? – Tretiak

+0

这次我只是再试一次,就像你说的那样,它的工作原理!谢谢。我不确定它是如何设置的。 – Tretiak

1

绝对肯定永远不会彻底用户输入。原因如下:

假设我输入了。 ,,瓦特糟糕,手指滑落,没有问题:←退格,那里。现在让我们看看......嗯?为什么文本框只显示12?我的3去哪了?

相反,允许用户输入他们想要的任何内容,并且只有在输入完成后(例如,在change事件中),才能验证输入并通知用户它是否不符合要求。

HTML5可以实现这个要求:

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

数字输入甚至不允许所有浏览器中的字母。见FF。 –

+0

@JenniferMichelle你有没有试过在'数字'输入中有非数字输入时提交表单? –

+0

对不起,我以为你在谈论正确的你类型(我不得不阅读大约100个线程来弄清楚如何创建我的正则表达式)。虽然有一些,虽然很少,但用户比看到一堆验证错误更容易。 –