Промышленный номер телефона Regex (проблема Regex)

Я пытаюсь извлечь номера телефонов из сообщений, отправленных мне через контактную форму. Эта "контактная форма" получает более тысячи заявок в день, и многие из этих отправителей делают ошибки форматирования, такие как:

"Пожалуйста, перезвоните мне по телефону 925-943-2343 доб. 304" (без номера перед номером)

В настоящее время мое регулярное выражение, которое находится ниже, пропускает эти числа с определенными ошибками форматирования (такими как нехватка места перед числом)

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;
}

Почему это ничего не возвращает?

1 ответ

Попробуй это:

[01]?[- .]?\(?[2-9]\d{2}\)?[- .]?\d{3}[- .]?\d{4}(?:i.{0,3}x?.{0,9})(\d{1,5})
Другие вопросы по тегам