我知道 html5 输入标记有一个 pattern
属性,但这有助于在用户输入值后验证字段。
这里的请求是为了防止
用户输入错误的内容,而不是事后纠正。我没有兴趣讨论它是否更好 - 这只是一个请求。
我还知道我可以为 keyPress
事件添加一个事件监听器并决定接受哪些字符。
但是我看到的所有示例都不是跨浏览器兼容的(我至少对 FF、Chrome 感兴趣,无论是桌面版还是移动版)并且它们都失败了,因为用户可以输入“----”或“....”。
什么是可靠、健壮、跨浏览器的正则表达式模式来允许用户输入:
- 任意数字 [0..9]
- 只有一个小数点(“.”或“,”转换为第一个小数点)
- 指定的小数位数(即小数点后的数字)
- 可选仅一个符号(“+”或“-”)作为第一个字符
- 常用文本命令:箭头键、复制/剪切/粘贴、退格键、删除、输入
最好不使用 jQuery
- 因为我应该仅为此目标添加它。
最佳答案
“此处的请求是为了阻止用户”——不要这样做。
如果我正在输入我的名字,但在输入 i 时我的手指打滑,并且我也按下了 8 键...没什么大不了的,我只是按下了退格键,对吗?
嗯,你的想法是错误的。您的姓名输入不允许使用数字,因此不会出现意外的 8,退格键会删除 i。
在您的问题中,您似乎正在寻求数字输入(您是否考虑过 <input type="number" />
?),因此在尝试输入 9 时,手指滑动可能适用于 * 键。无论您输入什么,相同的想法都适用。
始终允许用户输入他们想要的任何内容。当他们完成输入(元素的 onchange
或表单的 onsubmit
)时,然后你告诉他们“嘿,你输入的这个东西不看来是对的。”
因此,支持 input[pattern]
的浏览器提供的行为正确,不应更改。
关于javascript - 可靠的 html5 输入类型处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40975695/