【问题标题】:How to stop a number input removing the first 0 in a number如何停止数字输入删除数字中的第一个 0
【发布时间】:2014-06-02 12:45:42
【问题描述】:

对于信用卡付款,我们接受 3 位数的安全码。

在某些情况下,在某些浏览器(可能是较旧的 IE 版本)上,我们会出现开头为 0 的代码(例如 012),其中第一个 0 被删除,因此只允许输入 12。因此,这会使安全码。

我们将此作为数字输入,仅允许在移动设备上输入数字,我感觉这就是原因。但是,我们能做些什么来阻止这种情况发生吗?

当前输入的代码是:

<input type="number" pattern="[0-9]*" size="4" value="$securitycode" name="securitycode">

非常感谢。

【问题讨论】:

  • 从技术上讲,虽然它只包含数字,但我将其视为字符串输入,因为您需要 3 个字符并且实际上并不关心字段的数值。因此,您应该将其验证为应仅包含数字的字符串,而不是数字......因此更改您的输入类型。

标签: html


【解决方案1】:

这种行为是根据the spec,所以我认为你不能直接做一些事情来阻止它。

如果用户代理提供选择号码的用户界面, 那么该值必须设置为the best representation of the number 将用户的选择表示为浮点数。

具体来说,“最佳代表”定义中的确凿证据是

(11)。收集作为 ASCII 数字的字符序列,并将结果序列解释为以十为底的整数。倍增价值 按那个整数。

我假设您希望保留输入类型,以便移动用户代理向用户呈现更适合输入数字代码任务的 UI。所以你可以做的是,既然你现在知道规范所说的,那么在服务器端预测这种行为:用零填充传入的值。

【讨论】:

  • 乔恩,感谢您的回答。用零填充的问题是,并非每个安全代码都以 0 开头。我在技术上没有足够的天赋来将一些代码拼凑在一起,如果有一个零,就会神奇地添加一个 0。我发现了这个潜在的解决方法:stackoverflow.com/questions/7833257/…
  • @Daffy:我不确定是什么问题。安全码是 3 位数字,如果是 AMEX,则为 4 位。您可以从卡号判断该卡是否为美国运通卡,因此请根据需要用零填充 3 位或 4 位数字。如果已经有尽可能多的数字,那么填充将是无操作的。使用type="tel" 是一个好主意只要规范保证你想要的行为(我没有检查过)。
【解决方案2】:

似乎将输入类型更改为“文本”可能会解决此问题。

【讨论】:

  • Tanel,会的,但是如果我想在移动设备上保留数字键盘,那就不好了。
  • 输入类型“tel”怎么样。它不会强制使用任何语法,但仍会生成数字键盘。
  • 我认为这是我必须采取的路线。干杯。
猜你喜欢
  • 1970-01-01
  • 2020-07-17
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 2022-11-25
  • 2018-06-30
相关资源
最近更新 更多