1

我的需求很简单 - 我想让用户以理智的方式输入货币值,这意味着:

  1. 粘贴一个整数产生一个整数,即粘贴12345给出12345而不是123.45
  2. 粘贴小数值会产生相同的值,即粘贴1234.5yield1234.5而不是123.45。粘贴1234.0应该产生1234or 1234.0or 1234.00- any 是有效的,但我想中间的应该是最简单的。
  3. 分数分隔符.必须是显式且可选的。即用户可以键入12345或用户可以键入123.45。这两个输入产生不同的值 - 请参阅前两项。
  4. 输入不是固定大小。即123and123412345and12.3都是有效的输入。
  5. 应该阻止粘贴错误的输入。最好是通过简单地删除有问题的字符。
  6. 键入错误的输入也应该被阻止。这意味着有效输入的任何前缀也应该是有效的。123.因此,允许键入/粘贴。
  7. 作为奖励,开发人员应该能够指定整数部分显示为,除以千、百万等...即1234567.8显示为1,234,567.8

这种输入的正则表达式(省略逗号)将是/^[1-9]\d*(\.\d{0,2})?$/(注意.允许作为最后一个字符)。

现在,我尝试了几个 jQuery 插件,它们似乎是网络上最流行的。不幸的是,没有一个符合要求:

我的限制有那么特别吗?我不这么认为。任何人都可以提出一个可以满足所有约束的已检查插件的替代方案吗?

谢谢。

编辑

Robin Herbots 的一个实现 - https://github.com/RobinHerbots/jquery.inputmask。看起来很有趣,看起来除了奖金之外的所有东西都支持。仍在检查 - http://jsfiddle.net/mark69_fnd/KW4qn/

编辑2

不幸的是,https://github.com/RobinHerbots/jquery.inputmask有自己的问题。例如,它在扩展文件中定义了几个有用的输入掩码,但我就是无法理解它是如何工作的(但我可能只是愚蠢)。但是,它似乎也弄乱了我的造型。由我的 css 声明为中心对齐的数字字段变为右对齐。据我了解,这是不可接受的。简而言之,没有爱。

4

2 回答 2

0

您可以像这样禁用对齐。

$('#test').inputmask('decimal', { rightAlignNumerics: false }); 

;-)

于 2013-04-10T11:59:09.313 回答
0

请参阅此 plnkr。

http://plnkr.co/edit/OE6PGTuCvQa380S7b8Zg?p=preview

它通过 jquery.simulate 验证每个按键上的正则表达式

我不知道如何为您的需要构建正则表达式,但掩码工具和模拟是您所追求的。

于 2013-10-15T19:25:15.163 回答