好的,我有这个正则表达式:
( |^|>)(((((((\+|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)。
虽然不太容易理解,但正如您所看到的,它也有很多重复。但现在它处理得非常准确。
所有以下欧洲格式的电话号码都被接受。
0031201234567
0031223234567
0031612345678
+31(0)20-1234567
+31(0)223-234567
+31(0)6-12345678
020-1234567
0223-234567
06-12345678
0201234567
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页面中搜索电话号码。)