我需要一个经过良好测试的正则表达式(首选.net样式),或其他一些将美国/加拿大电话号码解析为组件部分的简单代码,所以:
等...
全部解析成:
答案 0 :(得分:19)
答案 1 :(得分:3)
这是我使用的那个:
^(?:(?:[\+]?(?<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得到的。我相信。
答案 2 :(得分:1)
首先删除任何不是数字的内容。然后你的所有例子都缩减为:
/^1?(\d{3})(\d{3})(\d{4})(\d*)$/
支持所有国家/地区代码有点复杂,但适用相同的一般规则。
答案 3 :(得分:1)
这个正则表达式完全按照您的示例工作:
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"];
答案 4 :(得分:1)
这是一个与GeoIP一起使用的编写良好的库,例如:
答案 5 :(得分:0)
这是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”, 等