我正在努力编写一个正则表达式,从一个完整的电话号码字符串中提取电话分机。这应该适用于这样的数字:777.777.7777 x 7302
它也应该使用“ext”,“EXT”,“Ext”,“eXt”,“ext。”和“Ext”。基本上只是涵盖了它的所有常见用途。
我只需要“x 7302”部分。事实上,一旦我提取它,我就会将其剥离为扩展号。
有人能帮帮我吗?当正则表达式变得更复杂时,我会挣扎。
我在PHP函数(preg_match)中执行此操作,如果这对任何人都有帮助。
答案 0 :(得分:5)
这可能会让你有所帮助:
$phonenumber = '777.777.7777 x 7302';
$extension = preg_replace('(^.*(ext|x) ?([0-9]+)$)i', '$2', $phonenumber);
echo $extension;
使用i
修饰符(最后)使正则表达式不区分大小写,以匹配ext
的所有组合。我使用了一个组来提供两种变体:ext
或x
:(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手册,可以使用以下链接: