我想在输入时使用正则表达式来格式化输入中的数字。
我的问题是:由于我使用组格式化数字,它只在字符串与正则表达式匹配时才格式化。
这是一个例子:
完整的数字是:12312312312
|格式化为:123.123.123-12
。
例如,如果我输入1231231
,它就不会像我期望的那样格式化为123.123.1
,只有当我键入整个数字时才会这样。
这是我的功能:
format(value){
// This function returns the formatted string on user input
return value.replace(/(\d{3})(\d{3})(\d{3})(\d+)/, "\$1.\$2.\$3-\$4");
}
有没有办法让其余的组选项?
答案 0 :(得分:9)
您可以使用
执行此操作
function formatStr(str){
str = str.replace(/(\d{1,3})(\d{0,3})(\d{0,3})(\d{0,2})/g, function(a, b, c, d, e){
let ret = "";
if(b != "")
ret = b;
if(c != "")
ret = ret+"." + c;
if(d != "")
ret = ret+"." + d;
if(e != "")
ret = ret+"-" + e;
return ret;
})
console.log(str);
}
formatStr('12312312312');
formatStr('1231231');
答案 1 :(得分:0)
您可以使用此format
功能对.replace
进行2次调用:
<强>代码:强>
function format(value) {
// This function returns the formatted string on user input
return value.replace(/(\d{3})/g, '$1.')
.replace(/((?:\d{3}\.){2}\d{3})\./, '$1-');
}
console.log(format('1231231')); //=> 123.123.1
console.log(format('12312312312')); //=> 123.123.123-12