2010-10-25 273 views
1

有沒有人得到一個很好的正則表達式,匹配英國和美國的數字?英國和美國電話的電話號碼正則表達式

它需要迎合英國的前綴,如+44和美國的等值。

有沒有人知道這樣的表達?

+0

參考:[北美編號計劃](http://en.wikipedia.org/wiki/North_American_Numbering_Plan?title=North_American_Numbering_Plan) – 2010-10-25 12:07:06

+2

看看英國和美國的編號系統和兩個變化的速度(以適應不斷增長的城市,新的小區網絡等),我會推薦一個非常簡單的正則表達式,它檢查國家前綴(+44或+1),然後x位數(正式最多19個,但擴展可能會增加更多)。 – 2010-10-25 12:08:13

+1

這個問題幾乎每週都會出現。請先做一個搜索。 – Ether 2010-10-25 16:14:04

回答

0

您可以使用下面的驗證英國手機號碼:

<?php 
function valid_UK_mobile($gsm) { 
    return preg_match("/^00447\d{9}$|^07\d{9}$|^447\d{9}$|^[+]447\d{9}$/", $gsm); // +447XXXXXXXXX, 447XXXXXXXXX, 07XXXXXXXXX, 00447XXXXXXXXX 
} 
echo (valid_UK_mobile("+447000000000") ? 'OK' : 'NOT OK') . '<br />'; //success 
echo (valid_UK_mobile("447000000000") ? 'OK' : 'NOT OK') . '<br />'; //success 
echo (valid_UK_mobile("07000000000") ? 'OK' : 'NOT OK') . '<br />'; //success 
echo (valid_UK_mobile("00447000000000") ? 'OK' : 'NOT OK') . '<br />'; //success 
echo (valid_UK_mobile("00440000000000") ? 'OK' : 'NOT OK') . '<br />'; // fail 
?> 

一些奇怪的與計算器,代碼 -​​

0

這些正則表達式模式太短。

的正則表達式來檢查地理區域代碼是否是有效的,號碼長度是正確的,運行到:

2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[012])\d{7}| 1(?:(?:1(?:3[0-48]|[46][0-4]|5[012789]|7[0-39]|8[01349])|21[0-7]|31[0-8]|[459]1\d|61[0-46-9]))\d{6}|1(?: 2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-4789]|7[013-9]|9\d)| 3(?:0\d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1235679]|9[24578])| 4(?:0[03-9]|[28][02-5789]|[37]\d|4[02-69]|5[0-8]|[69][0-79])| 5(?:0[1235-9]|2[024-9]|3[015689]|4[02-9]|5[03-9]|6\d|7[0-35-9]|8[0-468]|9[0-5789])| 6(?:0[034689]|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0124578])| 7(?:0[0246-9]|2\d|3[023678]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])| 8(?:0[35-9]|2[1-5789]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\d|8[02-9]|9[02569])| 9(?:0[02-589]|2[02-689]|3[1-5789]|4[2-9]|5[0-579]|6[234789]|7[0124578]|8\d|9[2-57]))\d{6}|1(?: 2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-4789]|8[345])))| 3(?:638[2-5]|647[23]|8(?:47[04-9]|64[015789]))| 4(?:044[1-7]|20(?:2[23]|8\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))| 5(?:24(?:3[2-79]|6\d)|276\d|6(?:26[06-9]|686))| 6(?:06(?:4\d|7[4-79])|295[567]|35[34]\d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])| 7(?:26(?:6[13-9]|7[0-7])|442\d|50(?:2[0-3]|[3-68]2|76))| 8(?:27[56]\d|37(?:5[2-5]|8[239])|84(?:3[2-58]))| 9(?:0(?:0(?:6[1-8]|85)|52\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\d{3}| 176888[234678]\d{2}|16977[23]\d{3}

上述正則表達式不格恩西島,曼或球衣號碼島處理。

如果您需要檢查英國寬帶,移動電話,免費電話,NGN和優惠價格以及其他號碼,還需要更多。

+0

這不是一個正則表達式,它是一個客廳技巧! :D你是否真的在生產環境中使用這個怪物? – 2011-02-21 06:20:45

+0

它在libphonenumber中,它拒絕太短或太長的數字,或者使用不存在的區號。 – g1smd 2011-02-21 19:19:06

+0

它在libphonenumber中,它拒絕太短或太長的數字範圍,或者使用不存在的區號。 – g1smd 2011-02-21 19:37:52

相關問題