首页 > 解决方案 > 为没有小数点和字母的千位分隔符定义正则表达式

问题描述

我有一个正则表达式 /\B(?=(\d{3})+(?!\d))/g 将数字格式化为千位分隔符。就像当你输入 752892 时,它给了我 752,892。我想添加到这个正则表达式不允许十进制值和字母。我们怎样才能做到这一点。

const THOUSANDS_SEPARATOR = ','
let  i= (value || '').toString();
    i= integer.replace(/\B(?=(\d{3})+(?!\d))/g, this.THOUSANDS_SEPARATOR);

标签: regexdecimal

解决方案


这个很棘手。一种可能的解决方案是将坏情况添加到被跳过的交替中。

一种方法是使用回溯控制动词*SKIP *FAIL

.*[a-zA-Z.].*(*SKIP)(*FAIL)|\B(?=(\d{3})+(?!\d))

演示

.replace另一种方法是将捕获组与回调 一起用于良好案例。

这是一个 JavaScript 示例,展示了它如何与不支持这些回溯动词的正则表达式一起工作:

const regex = /.*[a-zA-Z.].*|\B(?=(\d{3})+(?!\d))/gm;
const str = `
123
1234
12345
752892
Bad
123123456.000000
12a3123456.0000000000
123456.12345a12345`;

const result = str.replace(regex, function(m, group1) {
    if (group1) return ",";
    return "invalid";//m;
});

console.log('Substitution result: ', result);


推荐阅读