2012-12-13 125 views
1

我有多種格式的電話號碼列表,如(212)-555-1234212-555-12342125551234解析電話號碼中的區號

使用JavaScript,從這些字符串中只提取區號的最佳方法是什麼?

+1

需要了解在其中的電話號碼被找到的數據的一些更多的上下文。這是每行一個電話號碼嗎?電話號碼是否嵌入了文本?單行上可能有多個電話號碼嗎?也許你可以包含一個你試圖提取區域代碼的原始數據的例子。 – David

+0

下面的答案回答了我的問題,我希望我可以接受所有正確的答案:) –

回答

5

首先,刪除所有不是數字的數字以獲取普通數字。然後,通過切片獲得的前三個數字:

return myString.replace(/\D/g,'').substr(0, 3); 
+0

這是最好的,因爲如果你需要在任何時候對電話號碼進行驗證,這將比正則表達式保持得更好,它也更具可讀性。 – FrankieTheKneeMan

+0

@FrankieTheKneeMan它使用正則表達式。實際上,它使用正則表達式和兩個字符串方法。究竟是什麼讓它比正則表達更易維護呢? – canon

+1

@canon - 任何美國電話號碼都可以用10位數字表示。所有其他格式(空格,連字符,括號等)僅供人類閱讀。雖然這使用正則表達式,但它只是用它來削減所需的最小數量的信息。這也使代碼更易於維護,因爲它(a)更容易閱讀,並且(b)更具可擴展性。 – FrankieTheKneeMan

0

正則表達式爲'^\(*(\d{3})'應該這樣做。從比賽中獲得第一個小組。

這裏^將從頭開始匹配,\d{3}將匹配3位數字。 \(*將匹配可選的起始括號。 您不需要關心區號後面的下一個數字或符號。

+0

這是無效的。首先,它不會匹配這些字符串的任何部分,因爲使用'\\ d'而不是'\ d',即使這是固定的,它也會匹配'555'和'123' – DeanOC

+1

請使用正則表達式文字,它們比正則表達式字符串更容易閱讀。 – Bergi

+1

@DeanOC一個額外的轉義字符被用來逃避逃逸字符本身。爲了避免混淆,我刪除了它。你的第二部分也是對的。我使用'^'從頭開始匹配。語法可能沒有什麼問題,但在概念上**它只會匹配前3位數**。 –

1

取一個10位數字的前3位數字,或者從11開始的11位數字中的1後面的前3位數字。假設您的域名是美國電話號碼。

3

獲取第3個連續數字...

/[0-9]{3}/.exec("(212)-555-1234")[0] 

樣品(fiddle):

console.log(/[0-9]{3}/.exec("(212)-555-1234")[0]); // 212 
console.log(/[0-9]{3}/.exec("212-555-1234")[0]); // 212 
console.log(/[0-9]{3}/.exec("2125551234")[0]);​ // 212 
+0

或使用/\d{3}/.exec("(212)-555-1234")[0]保存更多字符 – Eli