2

我有一个我创建的 HTML 表单,其中有一个需要花费金额的字段。

根据我的阅读,JavaScript 不将小数识别为数字组件,并且公认的做法是以美分输入而不是处理美元金额。

问题是,我正在编写的表单提交给一个函数,该函数读取表单输入并对其执行一些操作,并将此美元金额作为格式为 ##.## 的文本,并将拒绝任何不采用这种确切格式的输入。

我想知道的是:是否可以创建一个包含 5 个字符并将第三个字符设置为永久小数点的文本框?

如果没有,有什么方法可以使用 JS 验证来确保输入格式正确?

谢谢!

4

2 回答 2

1

我认为你将不得不验证它。这篇文章有一些很好的验证美元金额的正则表达式:货币验证。它也有一些关于如何修剪的好处,这样用户就不能输入 412.234 美元或类似的东西。

于 2013-07-26T22:48:57.513 回答
0

您不能在 HTML 中创建一个固定有特定字符的文本框。也几乎没有任何必要,因为用户输入 12.34(指定金额时)比输入 1234 并自动插入句点更自然。

pattern您可以使用 HTML5属性指定所需的格式。并非所有浏览器都支持它,但在不支持时它不会造成任何伤害,并且即使在禁用 JavaScript 时它也会执行检查。您当然应该添加 JavaScript 检查,在这样的简单情况下,最好直接编写代码而不是使用任何库:

<input pattern="\d?\d\.\d\d" maxlength=5 size=5 onchange="check(this)">
<script>
function check(elem) {
  if(!elem.value.match(/^\d?\d\.\d\d$/)) {
    alert('Error in data – use the format dd.dd (d = digit)');
  }
}
</script>

使用的正则表达式同时接受 dd.dd 和 d.dd(省略?以仅允许第一种格式)。

该示例alert为简单起见;在真实页面中,您应该使用一些破坏性较小的方式向用户发出错误信号(通常,将文本写入为此类消息保留的区域),但最好的方式取决于整个页面的设计.

(使用 似乎更合乎逻辑<input type=number min=0 max=99.99 step=0.01 ...>,但这会引发严重的本地化问题,而且浏览器的实现type=number相当糟糕。最重要的是,不能保证发送的数据符合所需的格式。例如,在 Chrome 中,使用由浏览器创建的控件,数字将从 0.09 到 0.1 而不是 0.10,从 0.99 到 1 而不是 1.00 等)

于 2013-07-27T05:27:52.150 回答