正则表达式从数字类型输入中替换

Kar*_*lik 5 html javascript regex web-deployment

我有一个数字类型输入,我想防止别人输入数字以外的任何东西。我发现的示例适用于输入类型文本字段,但不适用于数字字段。

效果很好 :)

<input type="text" onkeyup="this.value=this.value.replace(/[^\d]/,'')">
Run Code Online (Sandbox Code Playgroud)

效果不好:(

<input type="number" onkeyup="this.value=this.value.replace(/[^\d]/,'')">
Run Code Online (Sandbox Code Playgroud)

JSFiddle上尝试一下

请帮忙...

Aer*_*roX 4

我刚刚使用 JSFiddle 做了一些简单的测试,如果元素上有无效输入,<input type="number" />则该this.value属性将返回空白。

使用 Chrome 时,以下行显示了此结果:

<input type="number" oninput="alert(this.value)">
Run Code Online (Sandbox Code Playgroud)

JSFiddle 演示


事实上,出现这种情况的原因如下:

value 属性(如果已指定且不为空)必须具有有效浮点数的值。

值清理算法如下:如果元素的值不是有效的浮点数,则将其设置为空字符串。

^ 来自HTML5 草稿纸部分关于数字输入类型的实现


这个问题现在引起了我的兴趣,我想出了一些解决方法。

<input type="number" oninput="updateNum(this)">
Run Code Online (Sandbox Code Playgroud)
function updateNum(e)
{
    e.select();
    e.value = getSelection().toString().replace(/[^\d]/g,'');
}
Run Code Online (Sandbox Code Playgroud)

如果选择在命令之间更改位置,则可能会出现错误。

JSFiddle 的解决方法