带有字母的电话号码的RegEx

时间:2011-03-16 21:02:53

标签: php regex formatting phone-number

我需要将电话号码格式化为一长串数字(美国电话号码格式)

// 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的数字映射/转换为:

18002255669

3 个答案:

答案 0 :(得分:2)

您可以使用strtr()

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

或者实际上,我认为:

$number = strtr($number, "AB...Z", "22...9");

答案 1 :(得分:2)

保存一些打字......

$phoneNumber = strtr($phoneLetters, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "22233344455566677778889999");

答案 2 :(得分:0)

第一步,你需要做一个不同的正则表达式替换(你的版本现在会丢失所有字母):

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

然后,您需要取出字符串并将每个字母替换为相应的数字(请参阅konforce的答案)。这对于正则表达式来说并不是真正的工作。