我试图用正则表达式来格式化的电话号码。 电话号码我已存储的是指出错误的长度和所有的电话号码有自己的国家代码。 比方说,一些看起来像这样:00460708186681.我想一个被格式化为:+46(0)708-18 66 81前3组很简单:
/00([\d]{2})([\d]{1})([\d]{3})/
由于号码的开头将始终是相同的。 这就是我不知道剩下的字符长度的最后部分(我希望他们被分为两组)。
我试图用正则表达式来格式化的电话号码。 电话号码我已存储的是指出错误的长度和所有的电话号码有自己的国家代码。 比方说,一些看起来像这样:00460708186681.我想一个被格式化为:+46(0)708-18 66 81前3组很简单:
/00([\d]{2})([\d]{1})([\d]{3})/
由于号码的开头将始终是相同的。 这就是我不知道剩下的字符长度的最后部分(我希望他们被分为两组)。
先从下面的正则表达式为你的基地:
00(\d{2})(\d)(\d{3})(\d{2})
现在,添加另一对(\d{2})?
(注意“?”),每对有可能有。 因此,如果对的最大数是3,你做到以下几点:
00(\d{2})(\d)(\d{3})(\d{2})(\d{2})?(\d{2})?
这不是很漂亮,但你需要做的是这样为了让他们正确地进行分组。 或者你可以简单地做:
00(\d{2})(\d)(\d{3})((?:\d{2}){2,4}) // In this case it's 2 to 4 pairs of digits on the end.
为了匹配字符串,那么你可以手动将包含您最初格式化后的全部位的最后一组加空格。
正则表达式是不是这里的最佳解决方案。 用这个:
var num = new String("00460708186681"),
i = 2,
p,
res = "+"+num.substr(i,2)+" ("+num.charAt(i+=2)+")"+num.substr(++i,3)+"-"+num.substr(i+=3,2);
while (p=num.substr(i+=2,2))
res+= "\u00A0"+p;
return res;
这将为无限长的数字工作。 regex无法做到这一点。
这里是解决方案:
使用Javascript:
var num="00460708186681";
var res=num.replace(/([0+]{2})([1-9]{2})([\d]{1})([\d]{3})([\d]{2})([\d]{2})([\d]{2})/g,'+$2($3)-$4 $5 $6 $7');
alert(res);
试试上面的脚本上http://codebins.com/