Javascript 使用jQuery/JS键入时,使用1000分隔符和2位小数设置货币输入格式?
我有一个文本输入,当我输入一个允许2位小数和1000个分隔符的值时,我希望它格式化。它应该只允许数字。 我已经做了以下操作,但它不允许添加小数点。简单地说,它用于输入产品货币的价格 输入=1234560ABC.5665应仅允许数字 预期=1234560.56应将小数位数限制为2 我已经做了以下工作,但不知道如何在小数点后加上一个。固定1000个分离器Javascript 使用jQuery/JS键入时,使用1000分隔符和2位小数设置货币输入格式?,javascript,jquery,html,Javascript,Jquery,Html,我有一个文本输入,当我输入一个允许2位小数和1000个分隔符的值时,我希望它格式化。它应该只允许数字。 我已经做了以下操作,但它不允许添加小数点。简单地说,它用于输入产品货币的价格 输入=1234560ABC.5665应仅允许数字 预期=1234560.56应将小数位数限制为2 我已经做了以下工作,但不知道如何在小数点后加上一个。固定1000个分离器 <input type="text" id="price" name="price&quo
<input type="text" id="price" name="price" />
$('#price').keyup(function (event) {
$(this).val(function (index, value) {
return '$' + value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
});
});
我的解决方案使用逐次替换 。替换/?!\\D/g,删除所有非数字字符,但不包括。
.replace/?我的解决方案使用连续的。replace 。替换/?!\\D/g,删除所有非数字字符,但不包括。
.replace/?您可以在keydown事件而不是keyup事件中限制键,并允许特定键生效,然后在keyup事件中格式化输入: $testinput.onkeydown,函数E{ var keycode=event.which?event.which:event.keycode; 如果e.shiftKey==true | | e.ctrlKey==true,则返回false; 如果[8,110,39,37,46].indexOfkeycode>=0 | |//允许制表符、点、左右箭头、删除键 keycode==190&&this.value.indexOf'.===-1 | |//如果值中不存在允许点 keycode==110&&this.value.indexOf'.===-1 | |//如果值中不存在允许点 keycode>=48&&keycode=96&&keycode 1&&&//有小数 零件[1]。长度>=2&&//应限制此值 keycode>=48&&keycode=96&&keycode=2计算+=.+部分[1]。子字符串0,2; 该值=计算值; 如果this.value==NaN | | this.value==this.value=0; };
您可以在keydown事件而不是keyup事件中限制键,并允许特定键生效,然后在keyup事件中格式化输入: $testinput.onkeydown,函数E{ var keycode=event.which?event.which:event.keycode; 如果e.shiftKey==true | | e.ctrlKey==true,则返回false; 如果[8,110,39,37,46].indexOfkeycode>=0 | |//允许制表符、点、左右箭头、删除键 keycode==190&&this.value.indexOf'.===-1 | |//如果值中不存在允许点 keycode==110&&this.value.indexOf'.===-1 | |//如果值中不存在允许点 keycode>=48&&keycode=96&&keycode 1&&&//有小数 零件[1]。长度>=2&&//应限制此值 keycode>=48&&keycode=96&&keycode=2计算+=.+部分[1]。子字符串0,2; 该值=计算值; 如果this.value==NaN | | this.value==this.value=0; };
@Techyte什么不起作用?您尝试了哪些输入失败?@TechyTee用另一个变体更新了答案。检查一下,还是不行。代码段给出了一个错误。我只输入了数字。什么也没发生。错误:{message:SyntaxError:invalid regexp group,filename:,lineno:16,colno:60}这对我来说很好,当我写字母时,我什么都没有,当我写数字时,我有$XX,XXX,XXX,如果我添加一个。我只有一个,后面只有两个,这不是OP想要的吗?@TechyTee在这里尝试同样的脚本fiddle@TechyTee什么不起作用?您尝试了哪些输入失败?@TechyTee用另一个变体更新了答案。检查一下,还是不行。代码段给出了一个错误。我只输入了数字。什么也没发生。错误:{message:SyntaxError:invalid regexp group,filename:,lineno:16,colno:60}这对我来说很好,当我写字母时,我什么都没有,当我写数字时,我有$XX,XXX,XXX,如果我添加一个。我只有一个数字,后面只有2个数字,这不是OP想要的?@TechyTee在Fiddle中尝试相同的脚本,它允许超过2位小数。当输入多个时。它会截断整个小数位,只返回整数。您输入的是2吗?它对此有保护作用。我没有想到小数点后2位,我会更新答案。更新我的答案。输入秒。仍在截断所有小数位。。请尝试565.56.56您正在测试哪个浏览器?它允许超过2位小数。当输入多个时。它会截断整个小数位,只返回整数。您输入的是2吗?它对此有保护作用。我没有想到小数点后2位,我会更新答案。更新我的答案。输入秒。仍在截断所有小数位。。请尝试565.56.56您正在测试哪个浏览器?在您的代码中,当我输入第二个小数位时,它会截断所有小数位。这就是你想要的吗?在你的代码中,当我输入第二个小数位时,它会截断所有小数位。这就是你想要的吗?别忘了接受你认为正确的答案。我们期待着你的消息。不要问就走,不要忘记接受你认为正确的答案。我们期待着你的消息。别光问就走。
$('#price').on('keyup click change paste input', function (event) {
$(this).val(function (index, value) {
if (value != "") {
//return '$' + value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
var decimalCount;
value.match(/\./g) === null ? decimalCount = 0 : decimalCount = value.match(/\./g);
if (decimalCount.length > 1) {
value = value.slice(0, -1);
}
var components = value.toString().split(".");
if (components.length === 1)
components[0] = value;
components[0] = components[0].replace(/\D/g, '').replace(/\B(?=(\d{3})+(?!\d))/g, ',');
if (components.length === 2) {
components[1] = components[1].replace(/\D/g, '').replace(/^\d{3}$/, '');
}
if (components.join('.') != '')
return '$' + components.join('.');
else
return '';
}
});
});