我試圖格式化一些電話號碼與正則表達式。我存儲的電話號碼的長度不一,所有電話號碼都有他們的國家代碼。比方說,一些看起來像這樣:00460708186681.我想一個被格式化爲:+46(0)708-18 66 81前3組很簡單:電話號碼格式javascript
/00([\d]{2})([\d]{1})([\d]{3})/
由於號碼的開頭將永遠是一樣的。這是我不知道剩餘字符長度的最後部分(我希望它們被分成兩組)。
我試圖格式化一些電話號碼與正則表達式。我存儲的電話號碼的長度不一,所有電話號碼都有他們的國家代碼。比方說,一些看起來像這樣:00460708186681.我想一個被格式化爲:+46(0)708-18 66 81前3組很簡單:電話號碼格式javascript
/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;
這將工作無限長的數字。正則表達式不能這樣做。
他正在處理電話號碼。它們的長度可能不一樣,但肯定有一個衆所周知的最大值(它不是很大)。 – Thor84no 2012-07-17 15:26:01
這裏是解決方案:
的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/
'[0 +] {2}'允許任意數量的0(1或_more_ 0s,兩次)。第二部分'[1-9] {2}'不會匹配'0010',例如應該被認爲是有效的,您可以使用'[1-9] [0-9]'代替。另外,不需要在'[]'裏面放置單個值(你用'0 +'和所有'\ d's來完成),因爲這是一個正則表達式中的OR。 – Thor84no 2012-07-17 15:17:17
你爲什麼用正則表達式這樣做呢?這不是這份工作的正確工具,即使它可以做到。它會更快,並且可能更簡單的使用固定的子字符串。 – Ariel 2012-07-17 09:39:14