2012-04-23 104 views
4

我想寫一個匹配的方法在PHP中,允許我匹配電話號碼。PHP - RegEx匹配電話號碼有或沒有國家代碼

我的情況是我想要構建一個應用程序,它將從Android設備中提取手機聯繫人號碼,在後端,它將匹配手機通訊錄與當前應用程序用戶,如果匹配,則添加這些用戶作爲朋友,類似於whatsapp在將手機聯繫人與在其設備中擁有WhatsApp應用的用戶進行匹配時的做法。

我現在遇到的問題是我如何編寫一個RegEx,可以匹配電話號碼是否帶有國家代碼或前導零。

在應用程序中,我要求的用戶的國家和電話號碼,例如我的一個朋友進入這些值: 國家:約旦(+962) 電話號碼:799633999 這在後端將被保存as +962799633999

如果我們假設我正在講故事,我的朋友號碼爲0799633999,那麼我可以使用的regEx將匹配0799633999和+96279963999?

回答

4

你的正則表達式是#(\+\d+|0)(\d{9})$#

+0

但國家代碼並不總是一個3個位數,我試圖找到需要一個通用的正則表達式考慮到任何國家代碼 – 2012-04-23 14:19:49

+0

看起來修改答案 – 2012-04-24 04:40:39

+0

很酷,非常感謝! – 2012-04-25 15:11:44

2

你不與正則表達式做到這一點。 截斷您的前導零和國家/地區代碼,並進行常規字符串比較。

如果聯繫人可以來自不同的國家,然後添加您正在尋找的朋友的國家代碼。

+0

我希望REGEX能夠截斷我,並通過排除前導零和國家代碼來進行匹配。只是,我無法猜測手機通訊錄中的號碼是否帶有前導零/國家/地區代碼,因此正則表達式將確保從兩個字符串中排除該號碼並進行匹配,否? – 2012-04-23 14:18:12

0

參考this鏈接,您可以使用正則表達式:

^([0|\+[0-9]{1,5})?([7-9][0-9]{9})$ 

PHP代碼:

$re = '/^([0|\+[0-9]{1,5})?([7-9][0-9]{9})$/'; 
$str = '+2529371208646'; 

preg_match_all($re, $str, $matches); 

print_r($matches); 
相關問題