我需要一个行之有效的正则表达式(.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