为什么输入类型=数字允许多个小数?

Web*_*ead 9 html html5

我理解为什么数字输入允许"e"或"E",但我很困惑为什么它允许多个小数.

如果查看有效浮点数的规范,可以得到:

如果字符串包含以下内容,则该字符串是有效的浮点数:

  1. 可选地," - "(U + 002D)字符.
  2. 按给定顺序执行以下一项或两项操作:
    1. 一系列一个或多个ASCII数字.
      1. 一个单一的"." (U + 002E)字符.
      2. 一系列一个或多个ASCII数字.
  3. 可选:
    1. 可以是"e"(U + 0065)字符或"E"(U + 0045)字符.
    2. 可选地," - "(U + 002D)字符或"+"(U + 002B)字符.
    3. 一系列一个或多个ASCII数字.

我在这里看到的所有内容都表明输入中只允许一个小数点,并且指定带有"e"的指数之前必须包含小数,并且无论如何都只能有一个"e".

然而,允许这样的输入:

  • 1 ..... 2
  • ......
  • EEEE ........
  • 1.0.0.01.0

等等.

在IE 11,这将让我在任何字符串我什么,但除非它是一个"有效"号码的类型.value"".在这种情况下, 1......e是有效的,但eeeeee不是.如果IE确定该值无效,则在远离输入的焦点上,显示屏空白,从而阻止用户修改现有输入.

在Chrome 51中,它只会让我输入数字,+/ - ,e/E和".".当我检查输入的值,如10.0. 额外的十进制,它仍然返回值10.0,但如果我键入10.0.010..字符串恢复为空.Chrome将保留显示无效输入.

当字符串变空时,它会阻止对输入进行进一步的验证检查并提供有用的用户反馈.

那么,为什么在数字输入字段中允许多个小数开始,为什么它们在浏览器之间如此奇怪地处理呢?

ajm*_*ajm 2

我做了一些挖掘,我有预感这可能是 Chrome 数字输入实现中的一个错误。

这是他们修复了数字类型输入中允许使用哪些字符的变更集。

值得注意的是这一行:

event->setText(locale().stripInvalidNumberCharacters(event->text(), "0123456789.Ee-+"));
Run Code Online (Sandbox Code Playgroud)

这意味着0123456789.Ee-+根据 Chrome 来说这些都是合法的字符。其他所有内容都被删除,但这些角色被允许通过。但是,不会检查输入的值是否是真正的实际数字,您可以输入由这些字符组成的无意义字符串,并使这些字符串仍然被视为有效(例如+++111ee...or ++++or...+++...+++...+++123321或类似的内容)。

在关于允许任何字符的数字输入问题的原始票证中,这似乎可能是作者的意图。您可以在 Chromium 的问题跟踪器上查看原始问题

不管怎样,可能值得向 Chromium 项目提交一份错误报告,让他们知道正在发生一些奇怪的事情。