javascript - 允许小数点后两位数
问题描述
嗨,我试图限制用户在小数点后输入 2 位数字。以下功能正在运行,但我无法修改最后两位数字。假设我输入了数字 3456.78,我想修改它不允许的 3456.68。
$('.PMT_AMT').keypress(function(event) {
var $this = $(this);
if ((event.which != 46 || $this.val().indexOf('.') != -1) &&
((event.which < 48 || event.which > 57) &&
(event.which != 0 && event.which != 8))) {
event.preventDefault();
}
var text = $(this).val();
if ((event.which == 46) && (text.indexOf('.') == -1)) {
setTimeout(function() {
if ($this.val().substring($this.val().indexOf('.')).length > 3) {
$this.val($this.val().substring(0, $this.val().indexOf('.') + 3));
}
}, 1);
}
if ((text.indexOf('.') != -1) &&
(text.substring(text.indexOf('.')).length > 2) &&
(event.which != 0 && event.which != 8) &&
($(this)[0].selectionStart >= text.length - 2)) {
event.preventDefault();
}
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<input type="text" class="PMT_AMT">
解决方案
该解决方案创建了一个预测并针对它测试正则表达式。
$('.PMT_AMT').keypress(function(event) {
if(!/^\d*(\.\d{0,2})?$/.test(
this.value.slice(0, this.selectionStart)
+ String.fromCharCode(event.which)
+ this.value.slice(this.selectionEnd)
)) event.preventDefault();
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<input type="text" class="PMT_AMT">
推荐阅读
- mqtt - Ingenico 终端上的 MQTT 协议,例如 iCT220
- piranha-cms - Piranha.Core 中页面的有限编辑权限
- python - 绘制 pandas groupby 对象
- haproxy - 子域的 HAProxy 配置
- timer - 当任何大于 3VDC 的电压施加到 ADC 通道 0 时,PIC 18F4520 会自行复位并保持复位
- c++ - 我可以用 constexpr 函数声明一个静态数组吗
- spring - 如何在不破坏我的反应能力的情况下记录到达我的 Webflux 应用程序的每个请求?
- java - Java 8:如何“加入”两个具有相同键的地图?
- python - 处理多个 Try/Except 语句
- android - 如何在我的应用程序中创建 whatsapp 共享选项