正则表达式,使用PHP以纯文本形式查找电话号码模式

时间:2014-02-26 08:19:34

标签: php regex

我有一个纯文本,其中包含不同模式的电话号码。我需要在纯文本中找到电话号码模式。 我做了这个

 $regex = '/^(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})(?:(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$/';
 $text = "fhsd hjkh ksd fsd fjkfhdsk 333-445-33333 sdfhjksdh s sdfjksd fdf";
 if(preg_match($regex,$text,$match)){
     print_r($match);
 }else echo "not found";

仅当我们将电话号码作为输入时才会检测到电话号码。它没有检测到纯文本中的电话号码模式。

请帮帮我。提前谢谢!

2 个答案:

答案 0 :(得分:3)

从开头删除^,从正则表达式的末尾删除$

$regex = '/(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})(?:(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?/';

您可以阅读有关anchors的更多信息。

更新:以连字符分隔的电话号码的正则表达式分为三部分:

$regex = '/\\d+-\\d+-\\d+/';

答案 1 :(得分:0)

将此表达式用于连字符分隔的电话号码

$ regex ='/ \ d + - \ d + - \ d + /';