Регулярное выражение для номеров телефонов с буквами


Мне нужно отформатировать телефонный номер в виде одной длинной строки номеров (формат телефонного номера в США)

// I know there are tons more
$phones = array(
    '1(800) 555-1212',
    '1.800.555.1212',
    '800.555.1212',
    '1 800 555 1212',
    '1.800 CALL NOW' // 1 800 225-5669
);

foreach($phones as $phone) {
    echo "new format: ".(preg_replace("/[^0-9]/", "", $phone)."<br />\n";
}

Теперь это должно вернуть что-то вроде этого:

8005551212 (with or without the 1)

Но как мне сопоставить/преобразовать номер с помощью ВЫЗОВА СЕЙЧАС в:

18002255669
Author: Phill Pafford, 2011-03-17

3 answers

Вы могли бы использовать strtr().

$number = strtr($number, array('A'=> '2', 'B' => '2', ... 'Z' => '9'));

Или на самом деле, я думаю:

$number = strtr($number, "AB...Z", "22...9");
 2
Author: Matthew, 2011-03-16 21:06:30

Чтобы сэкономить время на вводе текста...

$phoneNumber = strtr($phoneLetters, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "22233344455566677778889999");
 2
Author: Greg Hollowell, 2017-03-07 12:21:56

Для первого шага вам нужно выполнить замену другого регулярного выражения (ваша версия теперь потеряет все буквы):

$result = preg_replace('/[^A-Z0-9]+/i', '', $phone);

Затем вам нужно взять строку и заменить каждую букву соответствующей цифрой (см. Ответ konforce). На самом деле это не работа для регулярного выражения.

 0
Author: Tim Pietzcker, 2011-03-16 21:15:13