gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:30:58 25 4
gpt4 key购买 nike

我明白为什么number inputs allow "e" or "E" ,但我很困惑为什么它允许多个小数。

如果您查看 valid floating-point numbers 的规范,你得到:

A string is a valid floating-point number if it consists of:

  1. Optionally, a "-" (U+002D) character.
  2. One or both of the following, in the given order:
    1. A series of one or more ASCII digits.
      1. A single "." (U+002E) character.
      2. A series of one or more ASCII digits.
  3. Optionally:
    1. Either a "e" (U+0065) character or a "E" (U+0045) character.
    2. Optionally, a "-" (U+002D) character or "+" (U+002B) character.
    3. A series of one or more ASCII digits.

我在这里看到的一切都表明输入中只允许有一个小数点,并且必须在 指定带有“e”的指数之前包含小数点,并且只能有一个“e”,不管大小写。

然而,像这样的输入是允许的:

  • 1.......2
  • ……
  • 哎呀............
  • 1.0.0.01.0

等等。

在 IE 11 中,它会让我输入任何字符串,但除非它是“有效”数字,否则 .value""。在这种情况下,1......e 是有效的,但 eeeeee 不是。如果 IE 确定该值无效,则在焦点远离输入时显示空白,防止用户修改现有输入。

在 Chrome 51 中,它只允许我输入数字、+/-、e/E 和“.”。当我用一个额外的小数检查像 10.0. 这样的输入值时,它仍然返回 10.0 的值,但是如果我输入 10.0.010.. 字符串恢复为空。 Chrome 将继续显示无效输入。

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

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

最佳答案

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

Here's the changeset where they fixed which characters were allowed in an input of type number.

值得注意的是这一行:

event->setText(locale().stripInvalidNumberCharacters(event->text(), "0123456789.Ee-+"));

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

原票中关于数字输入允许任意字符的问题,看来这可能是作者的意图。 You can check the original issue on Chromium's issue tracker .

无论哪种方式,都值得向 Chromium 项目提交错误报告,让他们知道发生了一些奇怪的事情。

关于html - 为什么输入类型=数字允许多个小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38746954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com