用于从电话号码中提取业务扩展名的正则表达式

时间:2011-06-16 15:36:54

标签: php regex phone-number

我正在努力编写一个正则表达式,从一个完整的电话号码字符串中提取电话分机。这应该适用于这样的数字:777.777.7777 x 7302

它也应该使用“ext”,“EXT”,“Ext”,“eXt”,“ext。”和“Ext”。基本上只是涵盖了它的所有常见用途。

我只需要“x 7302”部分。事实上,一旦我提取它,我就会将其剥离为扩展号。

有人能帮帮我吗?当正则表达式变得更复杂时,我会挣扎。

我在PHP函数(preg_match)中执行此操作,如果这对任何人都有帮助。

7 个答案:

答案 0 :(得分:5)

这可能会让你有所帮助:

$phonenumber = '777.777.7777 x 7302';

$extension = preg_replace('(^.*(ext|x) ?([0-9]+)$)i', '$2', $phonenumber);

echo $extension;

使用i修饰符(最后)使正则表达式不区分大小写,以匹配ext的所有组合。我使用了一个组来提供两种变体:extx(ext|x)

其余的是在最后寻找一个数字,EXT和数字之间可以有空格。

答案 1 :(得分:4)

尝试使用正则表达式:

/e?xt?\.?\s*\d+$/i 

<?

echo "<pre>";
     $phone = '777.777.7777 x 7302'; 
        preg_match("/e?xt?\.?\s*\d+$/i", $phone, $matched); 
        print_r($matched);
?>

输出:

Array
(
    [0] => x 7302
)

答案 2 :(得分:0)

\w+\s*\d+$

这是一个更简单的正则表达式,假设输入类似于您提供的输入。

答案 3 :(得分:0)

这应该为你做

/([\d\-\.]+)([ext\. ]+)(\d+)/i

第一组匹配用短划线或点分隔的数字。第二组与您的扩展字符串匹配,第三组与您的分机号码匹配。

答案 4 :(得分:0)

答案 5 :(得分:0)

尝试此功能:

$pn = "777.777.7777 x 7302"; 

function get_ext($pn)
{
$ext = preg_replace('/[\d\.\s]+[ext\s]+(\d{1,})/i', '$1', $pn);
return $ext;
}

echo get_ext($pn);
//7302

答案 6 :(得分:0)

我对正则表达式有点怀疑,所以当我说,我有点偏见时,是否可以使用PHP函数“explode()”拆分字符串,使用'x'字符作为分隔符?

如果您不熟悉该函数的PHP手册,可以使用以下链接:

Explode()