javascript - 不会阻止输入无效数字,但“element.value”不允许我更正它们
问题描述
从MDN 文档中关于<input type="number">
:
它们包括内置验证以拒绝非数字条目。
这是否意味着“尝试提交 HTML 表单时拒绝”?我输入了“4e4--23”。HTML 没有拒绝它。
因此,<input type="number">
不能阻止非数值的输入。如果我能以编程方式更正用户的输入,我不在乎。例如,用户输入的减号不在第一个位置 - 使用 JavaScript,理论上我可以将其删除。
然而,这里有一个不明显的 JavaScript 行为:当输入元素具有“数字”属性并且value
是无效数字时,Element.value
返回一个空字符串。这是非常棘手的编程验证:因为我们有空字符串值,验证器将返回“输入不能为空。请输入值。” 输入不为空时出错!
document.getElementById("target").addEventListener("input", blackbox => {
console.log(document.getElementById("target").value);
});
<input type="number" value="" id="target">
我怎样才能得到实际输入的值?(如果你知道 Vue,也请添加 Vue 的解决方案。)
解决方案
尝试这个:
I only accept numbers:
<input type="text" v-model="form.availability" oninput="this.value = this.value.replace(/[^0-9]/g, '');">
<br>
I only accept numbers inlcuding a point:
<input type="text" v-model="form.availability" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');">
<br>
EDIT: I accept negative numbers inlcuding a point:
<input type="text" v-model="form.availability" oninput="this.value = this.value.replace(/[^0-9.-]/g, '').replace(/(\..*)\./g, '$1');">
<br>
EDIT: I accept negative numbers inlcuding a point:
<input type="text" v-model="form.availability" oninput="this.value = this.value.replace(/[^0-9.-]/g, '').replace(/(\..*)\./g, '$1').replace(/(\..*)\./g, '$1');">
<br>
EDIT2: I accept negative numbers inlcuding a point (only one "minus" sign):
<input type="text" v-model="form.availability" oninput="this.value = this.value.replace(/[^0-9.-]/g, '').replace(/(\..*)\./g, '$1').replace(/(\..*)\./g, '$1').replace(/(\-.*)\-/g, '$1');">
<br>
EDIT3: I also accept "e" and "E"
<input type="text" v-model="form.availability" oninput="this.value = this.value.replace(/[^0-9\.\-\e\E]/g, '').replace(/(\..*)\./g, '$1').replace(/(\..*)\./g, '$1').replace(/(\-.*)\-/g, '$1').replace(/(\e.*)\e/g, '$1').replace(/(\E.*)\E/g, '$1');">
<br>
不同的浏览器对待“输入类型号”的方式不同
推荐阅读
- javascript - 如何在 youtrack 工作流程中使用 getHours()?
- macos - 尽管文章中指定了完全相同的语法,为什么这个简单的 Hydra 命令不起作用?
- graph - 图 SDK 中的分页支持
- python-3.x - 无法使用 xml.etree.ElementTree 解析 html
- python - 如何只让超级用户编辑模型
- sql - 如何删除雪花中的所有 html 字符,不想在查询中包含所有 html 特殊字符(无硬编码)
- ruby-on-rails - 有没有办法通过在 Rails 中使用 Fast JSON API 来选择外部对象的一个属性?
- kubernetes - 在 POD 处于 RUNNING 状态后,kubernetes 事件中是否准备好探测?
- bash - 将 shell 脚本可选参数保存到外部文件
- sql - 需要两个表的 Oracle 查询连接