如何使用常规exp从段落中选择电话号码

时间:2012-10-16 06:29:43

标签: php regex preg-match

我想从段落中选择电话号码。但是电话号码的格式是

123-456-7890
123.456.7890
123*456*7890
(202) 553-6381
123_456_7890
1234567890
1.2.3.4.5.6.7.8.9.0
1*2*3*4*5*6*7*8*9*0
954 665 53 92 
456 7890 x123 

我有一个正则表达式,但它并不适用于所有情况。正则表达式是

$pat1="/(\d)?(0-9)|(\s|-|_|.|)?(\()?(\d){3}(\))?(\s|-|_|.){1}(\d){3}(\s|-|_|.){1}(\d){4}/";

2 个答案:

答案 0 :(得分:1)

它可能不是最好的,但它会匹配所有实例

(\d{3}([\-\.\*\s_]?\d{3})([\-\.\*\s_]?\d{4}))|\d(([\.\*]\d){9})|(\(\d{3}\)\s\d{3}\-\d{4})|(\d{3}\s\d{3}\s\d{2}\s\d{2})|(\d{3}\s\d{4}\sx\d{3})

答案 1 :(得分:1)

一个简单的未压缩正则表达式可以是这样的:

^\d{3}\s\d{3}\s\d{2}\s\d{2}|\d{3}\s\d{4}\sx\d{3}|\d{10}|\(?\d{3}\)?[\s-.*_]\d{3}[-.*_]\d{4}|(\d[*.]){9}\d$

请注意,在最后一行有x123,如果是四位数,则必须将正则表达式更改为:

^\d{3}\s\d{3}\s\d{2}\s\d{2}|\d{3}\s\d{4}\s\d{4}|\d{10}|\(?\d{3}\)?[\s-.*_]\d{3}[-.*_]\d{4}|(\d[*.]){9}\d$

另外,^表示开始,$表示结束。对于某些正则表达式查询,您必须删除它们。