我的需求很简单 - 我想让用户以理智的方式输入货币值,这意味着:
- 粘贴一个整数产生一个整数,即粘贴
12345
给出12345
而不是123.45
- 粘贴小数值会产生相同的值,即粘贴
1234.5
yield1234.5
而不是123.45
。粘贴1234.0
应该产生1234
or1234.0
or1234.00
- any 是有效的,但我想中间的应该是最简单的。 - 分数分隔符
.
必须是显式且可选的。即用户可以键入12345
或用户可以键入123.45
。这两个输入产生不同的值 - 请参阅前两项。 - 输入不是固定大小。即
123
and1234
和12345
and12.3
都是有效的输入。 - 应该阻止粘贴错误的输入。最好是通过简单地删除有问题的字符。
- 键入错误的输入也应该被阻止。这意味着有效输入的任何前缀也应该是有效的。
123.
因此,允许键入/粘贴。 - 作为奖励,开发人员应该能够指定整数部分显示为
,
除以千、百万等...即1234567.8
显示为1,234,567.8
这种输入的正则表达式(省略逗号)将是/^[1-9]\d*(\.\d{0,2})?$/
(注意.
允许作为最后一个字符)。
现在,我尝试了几个 jQuery 插件,它们似乎是网络上最流行的。不幸的是,没有一个符合要求:
http://www.meiocodigo.com/projects/meiomask/
不知道如何执行 1,2 和 3:http: //jsfiddle.net/mark69_fnd/gKuaH/
http://digitalbush.com/projects/masked-input-plugin/
不知道如何强制执行 1,2,3 和 4。粘贴行为很奇怪。http://jsfiddle.net/mark69_fnd/jF86D/
http://akzhan.github.com/jquery-keyfilter/
根本不适合这个特定任务,因为正则表达式似乎应用于每个字符,而不是整个输入:http: //jsfiddle.net/mark69_fnd/uj9ZK/
我的限制有那么特别吗?我不这么认为。任何人都可以提出一个可以满足所有约束的已检查插件的替代方案吗?
谢谢。
编辑
Robin Herbots 的一个实现 - https://github.com/RobinHerbots/jquery.inputmask。看起来很有趣,看起来除了奖金之外的所有东西都支持。仍在检查 - http://jsfiddle.net/mark69_fnd/KW4qn/
编辑2
不幸的是,https://github.com/RobinHerbots/jquery.inputmask有自己的问题。例如,它在扩展文件中定义了几个有用的输入掩码,但我就是无法理解它是如何工作的(但我可能只是愚蠢)。但是,它似乎也弄乱了我的造型。由我的 css 声明为中心对齐的数字字段变为右对齐。据我了解,这是不可接受的。简而言之,没有爱。