[英]Modify regular expression to allow negative numbers
我发现此脚本对我来说是一个完美的解决方案,只需几行代码,而不必安装另一个插件来格式化数字。
$(document).on('keyup', "#importo", function (event) {
// skip for arrow keys
if (event.which >= 37 && event.which <= 40) return;
// format number
$(this).val(function (index, value) {
return value
.replace(/\D/g, '')
.replace(/\B(?=(\d{3})+(?!\d))/g, ".")
;
});
});
现在我有一个问题,我需要脚本也允许负数。 我该如何更改?
也许您正在寻找这样的东西:
return value
.replace(/(?!^-)[^0-9]/g, "")
.replace(/\B(?=(\d{3})+(?!\d))/g, ".")
;
在第一个替换中,它将替换单词开头的除数字和连字符以外的所有内容。 我不知道这是否能解决您的问题。
我认为这是我能想到的最直接的更改,因为Javascript正则表达式不支持lookbehinds。
$(this).val(function (index, value) {
if (value.length === 1) {
value = value.replace(/\D/, '');
} else if (value.length > 1) {
value = value[0].replace(/[^-\d]/, '') + value.slice(1).replace(/\D/g, '');
}
return value.replace(/\B(?=(\d{3})+(?!\d))/g, ".");
});
我认为这更符合您的需求。 我写了一个正则表达式,它只允许数字/数字,但也允许负数。 它对值使用JS match方法。 返回值是一个数组,因此您必须从零索引中获取结果。
$(document).on('keyup', "#importo", function (event) {
// skip for arrow keys
if (event.which >= 37 && event.which <= 40) return;
// format number
$(this).val(function (index, value) {
var digits = value.match(/(^-\d*)|(\d*)/g); // allows digits starting with - or just digits only.
return digits[0];
});
});
正则表达式应该处理负号-
也。 请试试:
$(this).val(function (index, value) {
if (value.length === 1) {
value = value.replace(/\D/, '');
} else if (value.length > 1) {
value = value[0].replace(/[^-\d]/, '') + value.slice(1).replace(/\D/g, '');
}
return value.replace(/\B(?=((?:-)?(?:\d{3})+)(?!\d))/g, ".");
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.