首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入type="number“和pattern="[0-9]*”允许在火狐中使用字母

输入type="number“和pattern="[0-9]*”允许在火狐中使用字母
EN

Stack Overflow用户
提问于 2018-04-19 14:27:05
回答 5查看 43K关注 0票数 22

所以,所有的问题都在题目里。在Chrome中输入带有type="number"pattern="[0-9]*"可以很好,但是可以在FF中输入字母。有没有任何方法可以不使用jQuery或JS来修复它?

代码语言:javascript
复制
.small-input {
		-moz-appearance: textfield;
}
.small-input::-webkit-inner-spin-button {
			display: none;
		}

.small-input::-webkit-outer-spin-button,
.small-input::-webkit-inner-spin-button {
			-webkit-appearance: none;
			margin: 0;
		}
	}
代码语言:javascript
复制
<input class="small-input " pattern="[0-9]*" value="" type="number">

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-04-19 14:41:29

看起来Firefox并不限制您在数字输入中输入字母字符,但是它仍然会在提交表单时验证输入,如下所示。注意,eE在数字输入中都是有效的。

另外,根据MDN的说法,

<input type="number">元素不支持使用pattern属性使输入的值符合特定的regex模式。这样做的理由是,数字输入只能包含数字,而且可以使用min和max属性限制有效数字的最小和最大数目。

所以没必要用它。

选择一个数字输入实际上做了两件事。首先,在移动设备上应该打开一个数字键盘,而不是普通键盘输入,其次,它应该只允许数字作为有效的输入。因此,如果要阻止用户将文本输入到文本中,则需要JavaScript。

从下面的示例可以看出,当您尝试提交表单时,如果输入不是数字,它将提示您更正它,而模式属性是不必要的:

代码语言:javascript
复制
.small-input {
  -moz-appearance: textfield;
}
.small-input::-webkit-inner-spin-button {
  display: none;
}
.small-input::-webkit-outer-spin-button,
.small-input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}
代码语言:javascript
复制
<form>
  <input class="small-input" value="" type="number">
  <button>Button</button>
</form>

票数 13
EN

Stack Overflow用户

发布于 2018-04-19 14:58:11

您可以使用Regex完全阻止用户在input字段中输入任何字母。

因此,在您的输入元素上,我将添加以下事件侦听器:onkeypress="preventNonNumericalInput(event)"

代码语言:javascript
复制
<input class="small-input " pattern="[0-9]*" value="" type="number" onkeypress="preventNonNumericalInput(event)">

然后在JavaScript文件中创建以下函数:

代码语言:javascript
复制
function preventNonNumericalInput(e) {
  e = e || window.event;
  var charCode = (typeof e.which == "undefined") ? e.keyCode : e.which;
  var charStr = String.fromCharCode(charCode);

  if (!charStr.match(/^[0-9]+$/))
    e.preventDefault();
}

我已经测试过这一点,它应该防止任何非数字输入和任何特殊字符,如@#./?等.

票数 14
EN

Stack Overflow用户

发布于 2018-04-19 14:36:52

元素不支持使用模式属性使输入的值符合特定的regex模式。这样做的理由是,数字输入只能包含数字,您可以使用min和max属性限制有效数字的最小和最大数目,如上面所解释的。

链接:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number

您应该使用Javascript代替,遵循此链接

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49923588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档