RegEx для номеров телефонов с буквами - PullRequest
2 голосов
/ 17 марта 2011

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

// 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)

но как мне сопоставить / преобразовать число с помощью CALL NOW в:

18002255669

Ответы [ 3 ]

2 голосов
/ 07 марта 2017

Чтобы сохранить набор текста ...

$phoneNumber = strtr($phoneLetters, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "22233344455566677778889999");
2 голосов
/ 17 марта 2011

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

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

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

$number = strtr($number, "AB...Z", "22...9");
0 голосов
/ 17 марта 2011

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

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

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

...