Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5输入类型编号+;oninput regex验证擦除按点的字段_Javascript_Regex_Html_Input - Fatal编程技术网

Javascript HTML5输入类型编号+;oninput regex验证擦除按点的字段

Javascript HTML5输入类型编号+;oninput regex验证擦除按点的字段,javascript,regex,html,input,Javascript,Regex,Html,Input,HTML5中的输入类型数字与oninput事件相结合,使其具有可选的最大长度qith和可选的n最大小数,我遇到了一些问题。我有以下示例代码: 由于您只想控制总数及其小数部分的长度,因此我建议使用键下事件,而不是输入事件。下面的表达式 <input type="number" name="name" step="any" onkeydown= "return event.keyCode<32 || this.value.length<8 && /^\d*([.,

HTML5中的输入类型数字与oninput事件相结合,使其具有可选的最大长度qith和可选的n最大小数,我遇到了一些问题。我有以下示例代码:


由于您只想控制总数及其小数部分的长度,因此我建议使用
键下
事件,而不是
输入
事件。下面的表达式

<input type="number" name="name" step="any" onkeydown=
"return event.keyCode<32 || this.value.length<8 && /^\d*([.,]\d{0,2})?$/.test(this.value)"
>

  • 如果超过8个字符,则禁止输入
  • 如果输入的小数超过3,则禁止输入
  • 允许使用特殊关键点,如backspace
  • 不允许非数字输入(通过
    type=“number”
    自动)

如果输入非数字字符,您的主要问题是文本消失。(根据浏览器的本地化设置,点可以被视为非数字。)问题是,输入非数字值会使元素处于无效状态,元素的值也会无效

幸运的是,HTML可以使用
step
属性自己进行验证。你不会得到立即删除坏字符的满足感,但一旦失去焦点,输入将显示为无效。如果需要,可以为元素设置自定义错误消息


/^[0-9]+(\[0-9]{1,3})$/
请在stackoverflow代码段中设置您的代码,以便每个人都可以看到您描述的问题并直接处理。但是
/^[0-9]+(\[0-9]{0,3})$/
效果更好。谢谢,抱歉,我刚刚更新了它。我有同样的问题,这2个regexhowever将更好地工作比我的正则表达式,但仍然有问题,按点。我真的不知道这是否是一个正则表达式问题,因为在chrome控制台上它工作得很好/^[0-9]+(\[0-9]{0,3})$/.test('1.23')。如果你想将某个东西粘贴到字段中怎么办?@miken32你是对的:可以扩展条件以允许像Ctrl+V这样的键代码,但也可以通过上下文菜单进行粘贴。因此,如果只是限制数字和小数位数,html输入元素的
min、
max
step`属性将优于任何javascript解决方案。非常感谢。这个解决方案非常适合我。粘贴时我没有问题,因为我验证了提交表单上的所有字段,因此使用此方法,我可以限制意外错误的输入,并确保提交时的值是正确的(在服务器端进行额外验证,以避免任何用户更改浏览器上的代码)。非常感谢。这很好,可能是一个最佳实践,但我希望避免意外输入,并在提交表单验证之前使其可见。在某些情况下,这种方法对我来说可能很有趣,但在这一步中,我需要每一步应用1个整数。(我希望能够接受这两个答案)