【问题标题】:Decimal as first character in a number input field十进制作为数字输入字段中的第一个字符
【发布时间】:2015-09-20 07:33:43
【问题描述】:

我有一个 <input type="number"></input> 字段,当我尝试输入小数作为第一个字符时,它显示为无效(我有一个 ng-change 触发)。

.5 不起作用,但0.5 有效。对此我能做些什么吗?

【问题讨论】:

  • 也许问题是特定于浏览器的。试试火狐和 Chrome。也许其他一些验证器正在运行。尝试只使用 jsfiddle.net 中的 HTML(在 Firefox 中对我有用)。
  • 您愿意在 Angular 中创建自己的属性指令吗?或者您必须只使用内置于 HTML 输入的内容吗?因为您可以修改验证以接受此模式。
  • @northsideknight,是的,我希望用指令做什么?
  • 当您说“无效”时,您的意思是模型的验证器无效吗?还是您的意思是它不允许您在数字前输入小数点(就像您无法输入一样)?
  • 目前我们有这个检查:if(scope.dayTimeForm.$invalid),如果输入了无效的东西,它将把表单恢复到原来的状态。当我把小数放在第一位时,这总是会触发。

标签: angularjs html angularjs-directive html-validation


【解决方案1】:

根据 HTML 规范,.5 <input type="number"> 有效。

所以,你是对的,验证错误源自的工具(浏览器?Angular?)是错误的。

至于如何处理它——如何解决它——我不知道该建议什么,但作为一个真正在这个东西的规范上工作的人,我想请你至少取悦一下针对正在(错误)执行导致您看到该消息的实际验证的任何工具提交错误。如果没有人花时间报告这样的规范一致性错误(而是每个人都通过简单地输入,例如0.5 来解决它),那么这些错误永远不会得到修复。

无论如何,就我断言.5 实际上有效的证据而言:HTML 规范对此非常清楚;见the section defining what a valid floating-point number is:

一个字符串是一个有效的浮点数,如果它包含:

  1. (可选)U+002D 连字符减号 (-)。
  2. 以下一项或两项,按给定顺序:
    1. 一系列一个或多个 ASCII 数字。
    2. 以下两项,按给定顺序:
      1. 单个 U+002E 句号 (.)。
      2. 一系列一个或多个 ASCII 数字。
  3. 可选:
    1. U+0065 拉丁小写字母 E 字符 (e) 或 U+0045 拉丁大写字母 E 字符 (E)。
    2. (可选)U+002D 连字符减号字符 (-) 或 U+002B 加号字符 (+)。
    3. 一系列一个或多个 ASCII 数字。

除了来自规范本身的证据之外,还有其他支持证据的记录:事实上,有一段时间,HTML 规范不允许.5,而是要求将其写为0.5;然而,在针对规范提出了 “Floating point numbers beginning with a dot should be valid and parsed correctly” 错误之后,规范随后被更改(在 2011 年)以说明其当前状态(即,也允许,例如 .5)。

因此,自 2011 年以来,任何将 .5 标记为错误的工具都可能没有在这方面进行更新,因此它无论如何都需要其维护者返回他们的代码并评估他们的代码当前规范要求,以确保它们符合当前规范。

我希望以上内容提供了足够的弹药来针对负责任的工具提出错误。

【讨论】:

    【解决方案2】:

    如果您希望所有输入数字都有效,那么您可以在输入字段步骤中设置为“任意”。它适用于所有整数和小数。喜欢 -

    <input type="number" step="any" />
    

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多