我需要将电话号码格式化为一长串数字(美国电话号码格式)
// 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
答案 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的答案)。这对于正则表达式来说并不是真正的工作。