我需要一個行之有效的正則表達式(.NET風格的首選),或代碼將解析USA/CA的電話號碼成各個組成部分的一些其他簡單一點,這樣:解析電話號碼,零部件
- 1-303-555-1234x122
- (303)555-1234-122
- 1(303)555 -1234-122
等...
所有解析爲:
- AREACODE:303
- 交易所:555
- 說明:1234
- 分機:122
我需要一個行之有效的正則表達式(.NET風格的首選),或代碼將解析USA/CA的電話號碼成各個組成部分的一些其他簡單一點,這樣:解析電話號碼,零部件
等...
所有解析爲:
這是我使用的一個:
^(?:(?:[\+]?(?<CountryCode>[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?<AreaCode>[\d]{3})[\-/)]?(?:[ ]+)?)?(?<Number>[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?<Ext>[\d]{1,5}))?$
我從RegexLib得到它我相信。
地帶出什麼,這不是一個數字第一。然後,所有你的例子減少:
/^1?(\d{3})(\d{3})(\d{4})(\d*)$/
要支持所有的國家代碼是稍微複雜,但相同的一般規則適用。
爲什麼這個downvoted? – 2009-09-05 00:09:25
此正則表達式的工作原理完全一樣,你想用你的例子:
Regex regexObj = new Regex(@"\(?(?<AreaCode>[0-9]{3})\)?[-. ]?(?<Exchange>[0-9]{3})[-. ]*?(?<Suffix>[0-9]{4})[-. x]?(?<Extension>[0-9]{3})");
Match matchResult = regexObj.Match("1 (303) 555 -1234-122");
// Now you have the results in groups
matchResult.Groups["AreaCode"];
matchResult.Groups["Exchange"];
matchResult.Groups["Suffix"];
matchResult.Groups["Extension"];
這裏是geoip的使用實例的精心編寫的庫:
給出這樣的答案這裏有一個方法,通過對美國的電話號碼面向在Z目錄(vettrasoft.com), 提供的眼睛更容易:
string_o s2, s1 = "888/872.7676";
z_fix_phone_number (s1, s2);
cout << s2.print(); // prints "+1 (888) 872-7676"
phone_number_o pho = s2;
pho.store_save();
最後一行存儲到數據庫表「PHONE_NUMBER」的數量。 列值:country_code =「1」,area_code =「888」,exchange =「872」, 等
太可怕了。我的眼睛在流血。 – 2008-10-22 21:38:59
@保羅嘗試閱讀它formattted這樣http://pastebin.com/n9eQjRst – 2011-07-15 12:05:20
JavaScript沒有命名的組,它不捕獲擴展,直到我把?在{6,}範圍之後。受傷:`/^(?:(?:[\+]?(\d{1,3}(?:\s+|[\-\]))?[\(]?(\d {3})[\ - \ /)]?(?:\ s +)?)?([a-zA-Z2-9] [a-zA-Z0-9 \ - \。] {6,}?) ?(:(:\ S + | [XX] |(?:?[EE] XT [\])){1,2}(\ d {1,5}))$ /` – 2014-08-19 20:03:21