在javascript中使用正则表达式格式化数字
Format number using regex in javascript
我试图在JS
中实现一个自动格式化器,这样,如果我有一个给定的值(例如12345678)并且我有一个给定的格式(例如XX.XX.XX
或XX-XX-XX
或XX/XX/XX
或XXX-XXXX
),我可以自动格式化我的初始值为任何给定的格式。
所需的格式各不相同,因此它需要能够接受任何给定的格式,并重新格式化原始值以匹配。
我不知道这是否可能,也不知道该怎么做。谢谢你的帮助。
谢谢,
克拉拉
应该可以了
var value = '12345678';
// 12345678 => 12.34.56.78
console.log(value.replace(/('d{2})(?='d)/g, '$1.'));
// 12345678 => 12/34/56/78
console.log(value.replace(/('d{2})(?='d)/g, '$1/'));
// 12345678 => 12-34-56-78
console.log(value.replace(/('d{2})(?='d)/g, '$1-'));
// 12345678 => 1234-5678
console.log(value.replace(/('d{4})(?='d)/g, '$1-'));
// a more complex format (create US phone number)
// 1234567890 => +1 (123)-456-7890
console.log('1234567890'.replace(/^('d{3})('d{3})('d{4})$/g, '+1 ($1)-$2-$3'));
是这样的吗?
function format(mask, number) {
var s = ''+number, r = '';
for (var im=0, is = 0; im<mask.length && is<s.length; im++) {
r += mask.charAt(im)=='X' ? s.charAt(is++) : mask.charAt(im);
}
return r;
}
console.log(format('XX.XX.XX', 12345678)); // logs "12.34.56"
console.log(format('XXX-XXXX', 12345678)); // logs "123-4567"
console.log(format('XX-XX-XX', 12345678)); // logs "12-34-56 "
console.log(format('XX/XX/XX', 12345678)); // logs "12/34/56"
console.log(format('XX/XX/XX/XX/XX', 12345678)); // logs "12/34/56/78"
在编写此代码时没有损害正则表达式引擎。
小提琴
您可以从格式自动构建正则表达式,如下所示:
var format = 'XX-XX-XX';
var string = '111111';
var regex = '';
for(var i = 1; format.indexOf('X') >= 0; i++){
format = format.replace('X', '$'+i);
regex += '(''d)'; // to match a digit enclosed in ()
}
或作为函数:
function format(string, format){
var regex = '';
for(var i = 1; format.indexOf('X') >= 0; ++i){
format = format.replace('X', '$'+i);
regex += '(''d)';
}
regex += '[^]*'; // Match the rest of the string to crop characters overflowing the format.
// Remove this ^ line if you want `format('12345678', 'XX/XX/XX')` to return `12/34/5678` instead of `12/34/56`;
return string.replace(new RegExp(regex), format);
}
console.log(format('111111', 'XX-XX-XX')); // 11-11-11
console.log(format('111111', 'XX.XX.XX')); // 11.11.11
console.log(format('1111111', 'XXX-XXXX')); // 111-1111
console.log(format('111111', 'XX-XX-XX')); // 11-11-11
console.log(format('111111', 'XX/XX/XX')); // 11/11/11
console.log(format('123456789', 'XX/XX/XX')); // 12/34/56 (789 are cropped off.)
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- 正则表达式:使用 JavaScript 从字符串中获取格式化的数字 n.n.n
- Chrome告诉“Invaild Group”使用正则表达式来格式化数字
- 使用正则表达式重新格式化包含英国邮政编码的字符串
- Javascript - 用正则表达式替换字符串以格式化数字
- 正则表达式以格式化价格
- JavaScript - 替换/正则表达式以格式化论坛中的引号
- 格式化圣经经文引用与正则表达式在javascript
- 正则表达式,用于在 Javascript 中重新格式化美国电话号码
- 如何在javascript中使用正则表达式格式化字符串
- 使用正则表达式格式化负数
- 正则表达式格式化
- 正则表达式-格式化块中的文本- IM
- 在javascript中使用正则表达式格式化数字