2010-10-20 73 views
1

我試圖從一組數據中提取電話號碼。它必須能夠從每個國家提取國際和本地號碼。提取電話號碼

我爲它制定的規則是: 1.查找國際符號,表明它是一個國際撥號號碼,其有效的擴展名(從+1到+999)。 2.如果存在加號,請確保下一個字符是數字。 3.如果沒有,請查看長度以驗證它的長度在7到10位之間。 4.如果數字用連字符( - )或空格分隔(正確通過國際標準),請確保它們之間的數字數量爲3或4

我所擁有的var爲:

\+(?=[1-999])(\d{4}[0-9][-\s]\d{3}[0-9][-\s]\d{4}[0-9])|(\d{7,11}[0-9]) 

這對國際和本地搜索是\d{7,10}

的事情是,它實際上並沒有在它的空格或連字符拿起號碼。 有人可以給我一些建議嗎?

+0

可能重複或電話號碼驗證](http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) – EboMike 2010-10-20 21:20:02

回答

1

\d已經意味着「數字」,所以你不應該把另一個[0-9](它意味着相同)。

同樣,[1-999]並不意味着你的想法。它實際上匹配1和9之間的一個(1)數字。您可能想要\d{1,3},儘管那也匹配0

然後,你只允許一個變化的分塊(4-3-4) - 爲什麼?這不符合許多有效的電話號碼。

我建議如下:

使用正則表達式\+?(?=\d)[\d\s-]{7,13}\b抓住任何遠程看起來像一個電話號碼查詢您的字符串。也許你還希望在允許的字符列表中包含括號和斜槓:\+?(?=\d)[\d\s/()-]{7,14}\b

然後分別處理和驗證這些字符串,最好在刪除所有標點符號/空格(除了+之後)。

0

我不確定有可能創建一個正則表達式來匹配每個國家 - 有些國家有衝突的規則。

完全有可能具有例如兩個有效的本地號碼包含在1個有效國際號碼內。

你可能想通過尋找一些答案,這個問題開始:

A comprehensive regex for phone number validation

如果你正在尋找創造一些明確的對每一個國家,運氣好的話,你可能會需要花費一段時間的一些技術標準...

即兩個177186-0039-011-81-90-1177-1177是有效的電話號碼儲存在同一個國家[綜合正則表達式的F