好了,我有这样的正则表达式:我可以优化此手机正则表达式吗?
(|^|>)(((((((\+|00)(31|32)()?(\(0\))?)|0)([0-9]{2})(-)?()?)?)([0-9]{7}))|((((((\+|00)(31|32)()?(\(0\))?)|0)([0-9]{3})(-)?()?)?)([0-9]{6}))|((((((\+|00)(31|32)()?(\(0\))?)|0)([0-9]{1})(-)?()?)?)([0-9]{8})))(|$|<)
它格式化荷兰和比利时的电话号码(我只希望那些因此31和32作为国家代码)。
它的破译没有太多乐趣,但你可以看到它也有很多重复。但现在确实很准确
以下所有欧洲格式化的电话号码被接受
00312
0031223234567
0031612345678
+31(0)20-1234567
+31(0)223-234567
+31(0)6-12345678
020-1234567
0223-234567
06-12345678
02
0223234567
0612345678
和下面的错误格式化哪些不是
06-1234567 (mobile phone number in the Netherlands should have 8 numbers after 06)
0223-1234567 (area code with home phone)
与此相反,这是很好处理它。
020-1234567 (area code with 3 numbers has 7 numbers for the phone as opposed to a 4 number area code which can only have 6 numbers for phone number)
正如你可以看到它的“ - ”字符,使得它有点困难,但我需要它在那里,因为它通常被人们所使用的格式的一部分,我希望能够对其进行解析所有。
现在是我的问题...你看到一种方法来简化这个正则表达式(甚至改善它,如果你看到它的错误),同时保持相同的规则?
您可以在regextester.com
(测试它的“(|^|>)”是检查它是否在与可能一个字也被任何一个新行或之前的开始“ >'。我搜索HTML页面中的电话号码。)
我的第一个问题是:你真的需要所有这些捕获?你不能只抓住重要的部分并重新格式化。什么是相关的部分? – Axeman 2008-11-06 22:20:58
不,我搜索一堆文本中的电话号码,我不知道号码是什么,以什么传统方式格式化。在我发现它后,我基本上不再需要它了 – youri 2008-11-07 00:25:53