2011-10-06 18 views
1

我對通用的電話號碼正則表達式:正則表達式的通用電話號碼

**/^(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}$/** 

它接受下列字符串:

339-4248 
(095) 2569835 
+7 (095) 1452389 
+1(963)9632587 
+12365874 
2365789 

但它不接受

+12589637412 
+1 963 9632587 
+17

什麼是與此有關嗎?請幫我弄清楚我錯在哪裏。

+0

你用什麼語言來運行這個正則表達式? PHP? C#?不同的引擎對他們有不同的怪癖。 – Polynomial

+0

http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation –

+2

'^。* $'?怎麼辦?簡單,將抓住任何你可以想到的所有電話號碼。感謝至少在開始時接受帶有「+」號碼的號碼 - 與谷歌和亞馬遜等大公司一樣出錯。儘管如此,它甚至不會像我通常的形式一樣匹配我自己的電話號碼。 – Joey

回答

0

它只接受某些倍數的數字,它只接受數字內某些地方的空格。我的建議是放棄它,並恢復到一個非常簡單,放鬆的檢查,或者一個記錄,支持,國際測試的解決方案(libphone或其他)。

1

你爲什麼關心用戶在哪裏關心分解數字組或他們用來做什麼的字符?在這裏(瑞典),通常會看到一個人將給定的電話號碼寫爲046 123 456 789,而其他人則將其寫入046 123 45 67 89,但兩者都撥打相同的號碼並且同樣有效。 (因爲這一點,將是04 61 2345 6 78 9 - 不是我見過的格式,但它仍然是相同的撥號。)

只刪除非數字字符(除了前導+,因爲這是有意義的) ,檢查這是一個合理的數字位數,存儲該數字,並在顯示數字時將其呈現爲您的首選格式。或者保持用戶輸入的格式,儘管此時您需要採取一般預防措施來防止SQL注入,CSS,XSRF等攻擊。

0

你可以做的一件事就是研究所有的格式。你找到了一些好的。這裏有更多:http://en.wikipedia.org/wiki/Local_conventions_for_writing_telephone_numbers

接下來,您希望在語料庫中查找其中包含電話號碼的文檔,以及其他電話號碼不包含電話號碼的文檔。如果您正在處理結構化數據,這不是必需的。這個想法是你想要一個控制組來表明你沒有超越。

然後,你想得到像visual-regexp(一個通用的操作系統無關的軟件包),並把你的文本,並開始創建正則表達式,直到你涵蓋所有的情況下。

這樣認爲,只要你的例子,我想出了這一點: 正則表達式-nocase - 所有直插式 - {+ \ [0-9-]?([0-9] ?)?}字符串匹配

--Pete

+0

我應該指出,這個正則表達式根本不適用於自由文本。它提供了一個合理的命中空間。這只是一個例子。它審判後審判才能正確。 –

+0

這個更好一些,但它沒有得到每一個案例: regexp -nocase -all -line - {(\ + | \()?([0-9] {1,4} [\ \。(\)] +){1,3} [0-9] {4,7}}字符串匹配v1 v2 –