工业电话号码正则表达式(一个正则表达式问题)


Industrial Phone Number Regex (a Regex problem)

我正试图从通过联系表单提交给我的消息中提取电话号码。这个"联系表单"每天收到超过一千份提交,其中许多提交者都犯了格式错误,例如:

"Please call me back at925-943-2343 ext. 304"(号码前无空格)

目前,我的regex(如下)由于某些格式错误(例如数字前缺少空间)而丢失了这些数字

foreach (...)
{
    $regex = '/^(?:1(?:[. -])?)?(?:'((?='d{3}')))?([2-9]'d{2})' 
        .'(?:(?<='('d{3})'))? ?(?:(?<='d{3})[.-])?([2-9]'d{2})' 
        .'[. -]?('d{4})(?: (?i:ext)'.? ?('d{1,5}))?$/'; 
    if (preg_match($regex, $msg))
    {
        $phonenumber = preg_replace($regex, '($1) $2-$3 ext. $4', $msg); 
        echo $phonenumber;
    }
}

提示吗?

相关问题:

$regex = '/^(?:1(?:[. -])?)?(?:'((?='d{3}')))?([2-9]'d{2})' 
    .'(?:(?<='('d{3})'))? ?(?:(?<='d{3})[.-])?([2-9]'d{2})' 
    .'[. -]?('d{4})(?: (?i:ext)'.? ?('d{1,5}))?$/'; 
$line = "(732) 912 0159 ";
if (preg_match($regex, $line))
{
    $phonenumber = preg_replace($regex, '($1) $2-$3 ext. $4', $line); 
    echo $phonenumber;
}

为什么不返回任何结果?

试试这个:

[01]?[- .]?'(?[2-9]'d{2}')?[- .]?'d{3}[- .]?'d{4}(?:i.{0,3}x?.{0,9})('d{1,5})